2016-05-13 116 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')