2017-01-12 122 views
1

在js中,我使用正則表達式驗證來檢查我的輸入字符串是否與下面顯示的特殊字符匹配或不匹配。所以我使用RegExp對象的test()方法。無法在Javascript中創建RegExp項目

,但我總是得到一個異常錯誤說:

Uncaught SyntaxError: Invalid regular expression: /[^@/[]<>?:;,=|+"]/: Nothing to repeat

特殊字符,我想在輸入字符串檢查:

^ @/[ ] < > ? : ; , * = | + "

var str = "My Test String"; 
 
var re = new RegExp('[^@/\[\]\&lt;\&gt;\?:;,*=|\+\&quot;]*'); 
 
var result = re.test(str); 
 

 
alert(result);

我在代碼中做錯了什麼?

+2

你爲什麼要添加實體*字符類*只匹配來自設備的單個字符?該錯誤是衆所周知的,在構造函數表示法中,您需要使用雙反斜槓來轉義特殊字符。此外,字符類開頭的'^'創建了* negated *字符類,因此您的正則表達式匹配除'@','/','['之外的任何內容,然後跟隨一系列模式。你打算使用'var re =/[@^<> \/[\]?:;,* = | +「] |&(?: quot | [gl] t); /'? –

+0

或者' re =/[@^\/[\] <>?:;,* = | +「] /'夠了嗎? –

回答

2

該錯誤是衆所周知的,在構造函數表示法中,您需要使用雙反斜槓來轉義特殊字符。 |+在這裏引起問題,因爲字符類過早地以\]結束,其餘的是序列字符類外的模式。

關於

Special character that I want to check in the input string:

^ @/[ ] < > ? : ; , * = | + "

你只可以使用/[@^\/[\]<>?:;,*=|+"]/正則表達式。

var str = "My Test String"; 
 
var re = /[@^\/[\]<>?:;,*=|+"]/; 
 
var result = re.test(str); 
 
console.log(result ? "Special chars found!" : "No special chars found!");

添加實體,如&gt;進入角色職業,只有從集合匹配單個字符將使正則表達式匹配gt&作爲單獨的字符。 ^在字符類的開始處創建了否定字符類,因此您的正則表達式匹配除@/[之外的任何內容,然後跟隨一系列模式。

如果需要incluse實體,將其添加爲一種替代方案:

var re = /[@^<>\/[\]?:;,*=|+"]|&(?:quot|[gl]t);/