2012-02-10 35 views
0

我正在使用此代碼並使用「匹配」功能來檢測密碼的強度。我如何檢測字符串是否有特殊字符?用於特殊字符的Javascript匹配功能

if(password.match(/[a-z]+/)) score++; 
if(password.match(/[A-Z]+/)) score++; 
if(password.match(/[0-9]+/)) score++; 
+2

任何不是字母或數字的都是特殊字符匹配。 – mrtsherman 2012-02-10 15:55:44

回答

0
if(password.match(/[^\w\s]/)) score++; 

這將匹配任何不是字母數字或空白的空間。如果空白區也應該匹配,只需使用/[^\w]/

7

如果你的意思是@#$%和E特殊字符,你可以使用:

/[^a-zA-Z ]+/ 

^意味着如果它不是像a-z或A-Z或空間。

如果你的意思是像@ $ & $使用唯一的東西:

/\W+/ 

\w匹配單詞字符,\W不匹配單詞字符。

+0

+1解釋:-) – Bojangles 2012-02-10 15:58:21

3

你必須單獨列入白名單他們,就像這樣:

if(password.match(/[`[email protected]#\$%\^&\*\(\)\-=_+\\\[\]{}/\?,\.\<\> ... 

等。請注意,您必須使用\轉義正則表達式控制字符。

雖然不如/[^A-Za-z0-9]+/優雅,但這將避免國際化問題(例如,不會自動將遠東語言字符(例如中文或日文)列入白名單)。

2

你總是可以否定字符類:

if(password.match(/[^a-z\d]+/i)) { 
    // password contains characters that are *not* 
    // a-z, A-Z or 0-9 
} 

不過,我建議使用一個現成的腳本。使用上面的代碼,您可以輸入一堆空格,並獲得更好的分數。

1

從你的正則表達式看來,除了字母數字和特殊字符之外,你正在調用一切。如果是這樣的話,那就幹吧。

if(password.match(/[\W]/)) { 
    // Contains special character. 
} 

總之怎麼你爲什麼不結合這三個正則表達式爲一體。

if(password.match(/[\w]+/gi)) { 
    // Do your stuff. 
}