2013-08-23 204 views
8

我有以下的正則表達式不允許某些特殊字符:正則表達式不允許某些特殊字符

if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){  
    alert("password not valid"); 
} 
else 
{ 
    alert("password valid"); 
} 

這是工作。如果該正則表達式不包含任何括號內的特殊字符(~,.<>;':"\/\[\]\|{}()-=_+),它將接受密碼。

這裏我的問題是它也不允許我輸入奇怪的數字。

我在這裏錯過了什麼?提前致謝!

這裏有一個例子:

jsFiddle

+4

儘管您可以使用@ m.buettner的答案來修復您的正則表達式,但您仍然在做錯:使用whilelist的方法,指定* valid *字符! –

+0

@DarenThomas完全同意 –

+0

我也有if條件來檢查有效的字符,但我用它在服務器端。我現在正在做的是創建一個客戶端功能,它將檢查是否存在一些不允許的字符,將密碼指示信號更改爲弱。 – Gerald

回答

10

你已經有了一個字符範圍有:)-=包括)=(包括數字)之間的所有ASCII字符。此外

/[`~,.<>;':"\/\[\]\|{}()=_+-]/ 

,你不需要逃避所有這些字符:移動-到類的末尾或逃避它

/[`~,.<>;':"/[\]|{}()=_+-]/ 

注意,在你的情況,很可能是夠你使用test而不是match

if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){ 
    ... 

test返回一個布爾值(這是你所需要的),而match返回一個包含所有捕獲組的數組(無論如何你都會放棄)。

請注意,正如Daren Thomas在評論中指出的那樣,您應該決定允許哪個字符允許。因爲目前的方法並沒有處理各種奇怪的Unicode字符,而抱怨一些相當標準的字符,如_。要創建一個白名單,你可以簡單地反轉兩個字符類和條件:

if (!/[^a-zA-Z0-9]/.test(testString)) { 
    ... 

,幷包含所有你想允許的字符。

+0

謝謝!也爲'測試'事情。 – Gerald

相關問題