この正規表現で修正する必要があることがいくつかあります。
- パスワードの先読みチェックでは、数量詞のない期間があります。したがって、常にそのチェックに失敗します。たとえば、番号チェックの場合は、の
(?=.*\d)
代わりにを使用する必要があり(?=.\d)
ます。
- スラッシュを使用して文字を
/
エスケープするのではなく、バックスラッシュを使用します\
。最後の文字クラスのフォワードスラッシュで誤ってエスケープしました。
- 文字クラス内の特殊文字またはメタ文字は、閉じ括弧(
]
)、円記号(\
) 、括弧()、^
およびハイフン(-
)のみです。したがって、一重引用符によるものではありません。犯人は逃げられないあなたのカレットです。
^
引用符の代わりにカレットがエスケープされているこの正規表現を試してください'
:
(?=^.{8,16}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%\^&*()_+}{":;'?/>.<,])(?!.*\s)^.*$
私はあなたの質問によって、あなたは正規表現がパスワードを検証することを意味したと仮定しています:
- 少なくとも1つの番号
- 少なくとも1つのローワーチェイスキャラクター
- 少なくとも1つの大文字
- セットから少なくとも1つの特殊文字
!@#$%^&*()_+}{":;'?/>.<,
- 8〜16文字の長さ
これが当てはまる場合は、明確な要件で質問を更新してください。
RegexPalで正規表現で遊ぶ
jQueryベースのコード。ここでこれをいじる:
var regex = /(?=^.{8,16}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%\^&*()_+}{":;'?/>.<,])(?!.*\s)^.*$/g;
//if(regex.test($('#txtPassword').val())){ alert('Match'); }else{alert('No Match')}
if (regex.test('P@sSw0rD')) {
alert('Match');
} else {
alert('No Match');
}