Authentication




Cancel OK
B!コメントする  2014-02-06 16:52:00 by old

PHPの正規表現で連続した同一の文字を判別

パスワードってありますけど厳格なところだと

数字が入っていること
アルファベットが入っていること
連続して同じ文字がないこと

というのがあります。
あとは運用面では定期的に変更するとか、過去に使ったパスワードは使えないとか色々とありますが。

まずは簡単なところから

数字

pregmatch('/[0-9]/', 'adf');
false


アルファベット
pregmatch('/[a-z]/', 'adf');
true


この辺はよくあります。
次に同じ文字列が2個以上あるかどうかの判別

同じ文字連続判別
pregmatch('/(.)\1/', 'ba11a');
true


このようになります。
私自身は \1 というものがあることを今回調べるまで知りませんでした。
こういったものを必要とするものを作っていなかったということでもありますが。

\1 というのは先行して現れた文字列にマッチするかどうかを表すもので数字で何文字目かを指定するもののようです。
この \1 の場合は1文字目ということになり、先行するパターンで任意の文字(.)を指定しているので先行している文字と同じ文字ということになり同じ文字2文字という正規表現になります。

これを使うことで同じ文字を連続して使うことを防ぐ事ができます。
他にも隣り合った数字(1234とか6543)もチェックしようかと思って単純に

pregmatch('/(01)|(12)|(23)|(34)|(45)|(56)|(67)|(78)|(89)|(90)|(09)|(98)|(87)|(76)|(65)|(54)|(43)|(32)|(21)|(10)/', '45')
true


というのを考えてみたけどさすがに2桁だと全然関係なくても数字が隣り合うことくらいはあるだとうろ(さすがに4桁とかはアウトだけど)ということでボツ。
というかこれをもっとシンプルに出来るのかな?よくわかんないけど。

正規表現でなんでもしようと思えば出来るけど、正規表現に頼りすぎるよりは豊富なライブラリーを使ったりするほうが良いことも多々あるんで適材適所を見極めて使っていきたいと思います。


PHP  

  • コメント
  • コメントはまだありません