• ベストアンサー

正規表現でパスワードのチェック

8文字以上で、アルファベット大文字、アルファベット小文字、記号を最低1つずつ含んでいるか、というチェックを正規表現で行いたいと考えています。 以下のようにしているのですが、うまくいきません。間違っているのでしょうか? ^(?=.{8,})(?=[a-z]+)(?=[A-Z]+)(?=[~!#$%^&`*+;:"'?/|{}.=_,-]+).+$ また、使用しているのは、Jakarta-OroのPerl5Utilです。 使用しているライブラリが悪いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Perl5Utilでは未検証です。(一応VB.NETで多少やりましたが) http://lukewarm.s101.xrea.com/RegEx.html >(?=regexp)はregexpにマッチする文字列の直前にマッチするようなので 例えば (?=a)(?=A) は Aabにはマッチしないと思う。 最初の (?=a) でaの直前がマッチして,(?=A)で残っているのがabだからAがなくて通らないんじゃないかな。 それを考えて, ^(?=.{8,})(?=.*?[a-z]+)(?=.*?[A-Z]+)(?=.*?[~!#$%^&`*+;:""'?/|{}.=_,-]+).+$ という風に毎回.*?をチェックするようにしてみた。どうだろう? #ただ,見づらいんで俺は正規表現嫌いだけどね。(BNFの方が好き)

kotoby2003
質問者

お礼

うわぁ・・・ありがとうございますー(感動) 回答のとおりにしたら、ばっちりうまくいきました! ほんとうにほんとうにありがとうございました!! ※正規表現は、正規表現でなければならない、やむをえない事情があったので回避が困難でした。(すでに開発済みのアプリケーションで、入力チェックに正規表現を指定できる、というもの。)

関連するQ&A