2016-05-13 122 views
0

我試圖創建一個正則表達式來檢測字符串是否有特殊字符。如何轉義特殊字符

/[!$&*-\=^`|~#%'+?{}._]+/.test('Hello2016'); // returns true when should return false because there's no special character 

在上例中,它返回true。我想這跟=這個符號有關,但我不知道這是什麼錯誤。

+1

什麼是特殊字符?任何不是-Z 0-9?那麼sheeldotme已經回答了你的問題。如果您正在使用用戶輸入並希望將其用作正則表達式,那麼aldanux註釋將有所幫助,或者您可以查看google是如何實現的:https://github.com/google/closure-library/blob/master/closure/ goog /字符串/ string.js#L1134 – HMR

回答

3

實際上是因爲-這個字符。在字符類([...])內部,它表示一系列字符。例如,[a-f]將匹配a,b,c, d,e,f

正確的模式應該是:

/[!$&*\-=^`|~#%'+?{}._]+/ 

您還沒有實際指定你考慮一個「特殊字符」,但一個簡單得多的模式將是:

/[^\W_]/ 

這將匹配下劃線或任何不是拉丁字母或小數位的字符(\W)。

0

如果您想要檢測所有特殊字符,請確認該字符串僅包含所需的字符,這樣,您未考慮的特殊字符將被標記爲特殊字符。這使得您的代碼適用於更多的場景,並使其成爲未來的證明。

if(!name.match(/^[a-zA-Z0-9]+$/i)) { 
    // handle the case where there are special characters in the string 
} 
0

你應該逃避正則表達式這樣的特殊字符。

[!\$&\*\-\\=^`|~#%'\+\?{}\._] 

這些在正則表達式中有特殊含義。

$*-\+?. 

也許這也適用。

!/^[A-Za-z0-9]+$/.test('Hello2016')