2017-07-20 21 views
0

正規表現で最低1文字、1文字、大文字の8文字をチェックします。正規表現が機能しない - 最小8文字、1数字、1特殊文字、1大文字

function checkPassword(str) { 
    var re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[[email protected]#\$%\^&\*])(?=.{8,})$/; 
    return re.test(str); 
} 
+1

正規表現はjQueryとは何の関係もないことに注意してください。それらは純粋なJSです。私はタイトルを変更し、あなたの質問に再度タグを付けました –

+0

'/^(?=.*[az])(?=.*[AZ])(?=.*[0-9])(?=.* [!=。{8、} $)/ ' – tsh

+2

4つの明示的なテストがあるので、4つのテストを使用するだけではどうですか? '/.A8]/].every(re=>re.test(str))' [/.{8,}/、/ \ d /、/ [!@#\ $%\ ^&\ *]/'。 – RobG

答えて

2

KISS - これは簡単です。
文字列の長さは8文字以上ですか?いいえ?テストに失敗しました。はい?続行する。
文字列に対して4つの正規表現テストを実行します(パラメータごとに1つずつ)。
真実の価値があるということは、あなたが行けることを意味します。偽の値は検証を意味しません。
複雑なregexは、完全に理解していない、または完全にテストしていないと、奇妙なエッジケースで常にあなたを噛んでしまいます。理解しやすい小さな部分に分割し、テストを連続して実行します。あなたはスタイリッシュではなく、正しいものになりたい。

+0

さらに良いことに、別々のテストを行うことで、どのテストが失敗したかをユーザーに伝えることができます。 –

+0

^はい。理想的には、新たに追加されたそれぞれのチャンクでライブを検証し、すべての検証がパスしたら、送信ボタンから 'disabled'を削除します。それはより関与していますが、ユーザーフレンドリーでもあります。 – Chase

関連する問題