2016-09-27 56 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個最小。

我不熟悉正則表達式,但驗證不起作用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

注意連字符如何放置在字符類的先行結束的比賽中了。

您還可以在開始時放置未轉義的連字符。