2016-06-28 8 views
-2

私は、Srinivasのパスワード検証を行うための答えを参照しました。 最小8文字の正規表現は、1個、1つのアルファベットと1つの特殊文字は、私だけで次の特殊文字を使用することができ、この正規表現でパスワードの検証を確認する正規表現

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

です。 $ @ $!%*#? &。 したがって、dheepan~123またはdheepan.123を使用すると、不正使用が失敗します。すべての特殊文字を許可するにはどうすればよいですか?

+1

*「すべての特殊文字」*?それらを定義すれば、あなたの答えが得られます。 –

+1

これはあなたが与えられた解決策を理解していないことを意味します。それらの特殊文字をキャラクタークラスに追加するだけです。 – anubhava

+0

[$ @ $!%*#?&]にそれらを追加します。ドットを追加するときにスラッシュ(\。)を付けることを忘れないでください。 "〜"で - スラッシュが必要かどうか分かりませんが、試してみることもできます。 –

答えて

1

とにかく...あなたは\Wを使用して、すべての特殊文字を許可することができますが、私はあなたが本当にこれをしたいかわからない:

^(?=.*[A-Za-z])(?=.*\d)(?=.*[\W])[\w\W]{8,}$ 
+0

FYI: '[\ w \ W]'は '\ W'が'^\ 'であるため '.'に相当します。 – Cam

+2

@Cam:実際は' .'はデフォルトで改行にマッチしません。 – Toto

+0

Fair point、@Toto;デフォルトで '.'は改行と一致しません。だから '.' =' [\ w \ W] ' - ' \ n'。 '/./s' ='/[\ w \ W]/' – Cam

0

あなたは、すべての非としてのシンボルを定義するためにトーマスのソリューション@従うことができます単語の文字は\Wですが、これには空白が含まれていることに注意してください。ユーザーがパスワードに改行文字を持っていると、それらはほとんど確実にロックアウトされます。

パスワードについては、許可する文字を正確に説明する作業が必要です。またはピリオド.を使用する場合は、正規表現の文字クラスに@anubhavaを追加してください。

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&])[A-Za-z\[email protected]$!%*#?&]{8,}$" 
//        ^     ^
//         \__add them here __/_________ 
//          | |     | | 
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#?&~\.])[A-Za-z\[email protected]$!%*#?&~\.]{8,}$" 

正規表現を責任を持って使用するには、ボンネット内で何が起こっているのかを理解することが重要です。ここでは、あなたが使用している正規表現がどのように動作するかのウォークスルーがあります。

^ 
// From the beginning of your string 

(?=.*[A-Za-z]) 
// Look ahead       (?=  ) 
// any number of chars     .* 
// Until you find an alpha character [A-Za-z] 

(?=.*\d) 
// Look ahead       (?=  ) 
// any number of chars     .* 
// Until you find a digit    \d 

(?=.*[[email protected]$!%*#?&]) 
// Look ahead       (?=  ) 
// any number of chars     .* 
// Until you find one of these chars [[email protected]$!%*#?&] 

[A-Za-z\[email protected]$!%*#?&]{8,} 
// Find any of these characters   [A-Za-z\[email protected]$!%*#?&] 
// 8 or more times      {8,}