我正在使用此代碼並使用「匹配」功能來檢測密碼的強度。我如何檢測字符串是否有特殊字符?用於特殊字符的Javascript匹配功能
if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;
我正在使用此代碼並使用「匹配」功能來檢測密碼的強度。我如何檢測字符串是否有特殊字符?用於特殊字符的Javascript匹配功能
if(password.match(/[a-z]+/)) score++;
if(password.match(/[A-Z]+/)) score++;
if(password.match(/[0-9]+/)) score++;
只要做你在上面做了什麼,但對於[email protected]#$%^&*()
等只是一定要逃出已經在正則表達式的含義的字符創建一個組,像^
和(
等....
編輯 - I just found this which lists characters that have meaning in regex。
if(password.match(/[^\w\s]/)) score++;
這將匹配任何不是字母數字或空白的空間。如果空白區也應該匹配,只需使用/[^\w]/
。
如果你的意思是@#$%和E特殊字符,你可以使用:
/[^a-zA-Z ]+/
的^
意味着如果它不是像a-z或A-Z或空間。
如果你的意思是像@ $ & $使用唯一的東西:
/\W+/
\w
匹配單詞字符,\W
不匹配單詞字符。
+1解釋:-) – Bojangles 2012-02-10 15:58:21
你必須單獨列入白名單他們,就像這樣:
if(password.match(/[`[email protected]#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ...
等。請注意,您必須使用\
轉義正則表達式控制字符。
雖然不如/[^A-Za-z0-9]+/
優雅,但這將避免國際化問題(例如,不會自動將遠東語言字符(例如中文或日文)列入白名單)。
你總是可以否定字符類:
if(password.match(/[^a-z\d]+/i)) {
// password contains characters that are *not*
// a-z, A-Z or 0-9
}
不過,我建議使用一個現成的腳本。使用上面的代碼,您可以輸入一堆空格,並獲得更好的分數。
從你的正則表達式看來,除了字母數字和特殊字符之外,你正在調用一切。如果是這樣的話,那就幹吧。
if(password.match(/[\W]/)) {
// Contains special character.
}
總之怎麼你爲什麼不結合這三個正則表達式爲一體。
if(password.match(/[\w]+/gi)) {
// Do your stuff.
}
任何不是字母或數字的都是特殊字符匹配。 – mrtsherman 2012-02-10 15:55:44