2016-09-27 19 views
1

を期待どおりに動作しません:jqueryのパスワード検証は、私は次の検証コードを抱えている

function validPassword(password) 
{ 
    var regex = /^(?=.*[A-Za-z])(?=.*\d)(?=.*[[email protected]$!%*#-?&])[A-Za-z\[email protected]$!%*#-?&]{8,}$/; 
    var valid = regex.test(password); 
    return valid; 
} 

要件は次のとおりです。 最小の長さ8つの文字、1つの特殊文字、1文字の英字、1つの番号の最小値を。

私はregexに慣れていませんが、有効性は12345678aでは機能しません - 何らかの理由で特殊文字が検出されない場合はどうすればいいですか? アイデア?ありがとう

+0

特別な文字部分(おそらく他の部分)の '-'の意味的意味を持つよりも、特殊文字をエスケープする必要があります –

+0

真ん中のダッシュを変更してください:https://regex101.com/r/gE6yM7/2 – Jan

+0

また、なぜ '$'が二重になるのでしょうか?この正規表現はどこから取得しますか?私はそれらの中で同じ二重 '$'を使って多くの質問を見てきました。 –

答えて

1

問題は、前後の文字の間の範囲として機能する文字クラスの中間にあるエスケープされていないハイフンの存在です。

は、あなたはそれを修正するために、この正規表現を使用することができます:ハイフンは先読みの文字クラスの最後に、今試合に配置されてどのよう

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

RegEx Demo

注意。

先頭にエスケープされていないハイフンを配置することもできます。

関連する問題