2016-06-17 3 views
0

パスワードをテストするための正規表現を作成しようとしています。次のために私の現在の1つのチェック:オプションの文字がキャッチされないのはなぜですか?

  • ひとつの大文字
  • ひとつの小文字
  • 一つの番号

現在、利用者は、しかし、私がしようとしている、特殊文字を入力することはできませんこれをオプションのチェックとして追加します(Testing1とTesting1は両方とも一致する必要があります)。私が試した:

^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])(A-Za-z\d[[email protected]$!%*#?&]?){8,}$

しかし、それはそれをキャッチしません。私の特別なキャラクターセットが間違った場所にあると感じていますが、どこに配置するのか分かりません。

特殊文字のリストをオプションのチェックとして追加するにはどうすればよいですか?

+2

2番目の '$ @ $!%*#?& 'は文字クラスであるとしますか? – chris85

+0

間違って古い命令を貼り付けた。 – BDD

+0

私は '.':' ^(?=。* [AZ])(?=。* [az])(?=。* [0-9])(?=。* [$] @ $!%*#?&])。{8、} $ 'が必要ですが、先読みで特殊文字の1つが必要です。 '[A-Za-z0-9 $ @ $!%*#?&] {8、}'を使うと、 'ń'と言うことはできません。 –

答えて

3

文字の種類にホワイトリストやブラックリストを作成するなど、さまざまな方法で正規表現を設定できます。これは、特にあなたが探しているもののように見える、使用できる文字のホワイトリストを作成します。

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[[email protected]$!%*#?&]{8,}$ 

正規表現内訳:あなたは、オプションなどの特殊文字をしたいと言うので

^ // Assert position at start of the line 
(?=.*[A-Z]) // First positive lookahead, makes sure a capital character exists 
(?=.*[a-z]) // Make sure a lowercase character exists 
(?=.*[0-9]) // Make sure a number exists 
[[email protected]$!%*#?&] // All of the possible characters that can be typed 
{8,} // 8 to infinity characters 
$ // Assert position at end of line 

、それらは単に入力することができる可能な文字に配置されているが、それらはいずれかによって検証されません肯定的な先読み。

regex101でこの正規表現を参照してください。修飾子gmは、この例では行間で妥当性を確認するためにあり、使用例ではおそらく削除する必要があります。

「ホワイトリスト」アプローチの理由があるかもしれませんが、もっと一般的なアプローチで、いつか試してみたいと思うかもしれませんが、ほぼ何か(ブラックリスト)を許可してから、満たされる。

+0

だから、私はそれらのキャラクターを自分の任意のグループとして定義する必要はありませんか?私はそれらを私のキャラクターセットに入れることができますか? – BDD

+0

@BDD、それは正しいです。正規表現のこの部分は: '[A-Za-z0-9 $ @ $!%*#?&] {8、}'は入力できるものを定義する部分です。 '['と ']の間にあるものは、「可能な」文字を定義しますが、必要な文字は定義しません。 – KevBot

+0

パーフェクト。明確にしてくれてありがとう! – BDD

関連する問題