アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

また、使用しているのは、Jakarta-OroのPerl5Utilです。
使用しているライブラリが悪いのでしょうか?

A 回答 (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の方が好き)
    • good
    • 0
この回答へのお礼

うわぁ・・・ありがとうございますー(感動)

回答のとおりにしたら、ばっちりうまくいきました!

ほんとうにほんとうにありがとうございました!!

※正規表現は、正規表現でなければならない、やむをえない事情があったので回避が困難でした。(すでに開発済みのアプリケーションで、入力チェックに正規表現を指定できる、というもの。)

お礼日時:2009/04/30 11:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!