2010-12-08 11 views
0

次の正規表現を使用しています。パスワード検証に正規表現を使用する

^.*(?=.{6,20})(?=.*[a-z].*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$ 

私はそれが動作していない

^.\*(\?=.{6,20})(\?=.\*[a-z].\*[a-z])(\?=.\*[A-Z])(\?=.\*[0-9]).\*$ 

としてXMLで同じを使用しようとしています。以下のような例外が表示されます。

java.lang.IllegalArgumentExceptionが: CVC-パターン有効:値 'narendra1A' はパターン 「^に対してファセットは有効ではありません*(\ = {6,20}?)。 (\?=。* [az]。* [az])(\?=。* [AZ])(\?=。* [0-9])。*'#AnonType_passwordcreateUser'

この点については、いずれも助けてください。

おかげで、

ナレンドラ

+0

質問には関係ありませんが、 '^ 'の直後に最初の'。* 'を削除してください。それは不要で正規表現は非常に非効率的になります。また、パスワードの長さを6-20文字に制限していると思われる場合は、そうではありません。 100文字の文字列は、この正規表現を正常に渡します。 –

+1

上限は20文字になるのはなぜですか? – Gumbo

+0

@ Gumbo:正規表現をよく見れば、5文字以上の文字列は渡されません:) –

答えて

2

は、これが直接あなたの質問に答えていないが、それは正規表現で、パスワード品質チェックをやろうとしてよりあなたのためのより良いオプションかもしれません。

vt-passwordライブラリは、ルールベースのパスワード品質チェックを実装する優れたJavaライブラリです。文字/文字クラスのカウントに加えて、辞書のチェック、以前に使用されたパスワードのチェック、繰り返し文字のチェックなどを行います。

(Springを使用している場合は、春のXML配線ファイル内のオブジェクト。これはあなたのコードを変更せずにルールを調整することができます。)

0

パスワード正規表現パターン

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20}) 

説明

(   # Start of group 
    (?=.*\d)  # must contains one digit from 0-9 
    (?=.*[a-z]) # must contains one lowercase characters 
    (?=.*[A-Z]) # must contains one uppercase characters 
    (?=.*[@#$%]) # must contains one special symbols in the list "@#$%" 
    .   #  match anything with previous condition checking 
     {6,20} #  length at least 6 characters and maximum of 20 
)   # End of group 
+1

'.'の代わりに補語を使うとよいでしょう。したがって、\ '* \ d'、[[^ a-z] * [a-z] '、[[A-Z] * [A-Z]'など] – Gumbo

+0

:)はい! +1ありがとう –

0

あなたのパターンは、XMLドキュメントで禁止されている文字を使用します。 物事を単純にするために、パスワードをCDATAに入れてください。

関連する問題