我试图创建一个正则表达式来检测字符串是否有特殊字符。
/[!$&*-\=^`|~#%'+?{}._]+/.test('Hello2016'); // returns true when should return false because there's no special character
在上一个示例中,它返回true。我想这与=
符号有关,但我不知道它的错误在哪里。
答案 0 :(得分:3)
实际上是因为-
字符。在字符类([...]
)内部,它表示一系列字符。例如,[a-f]
将匹配a
,b
,c
,d
,e,
或f
。
正确的模式是:
/[!$&*\-=^`|~#%'+?{}._]+/
你实际上没有指定你认为是'特殊字符'的东西,但是更简单的模式是:
/[^\W_]/
这将匹配下划线或任何不是拉丁字母或十进制数字(\W
)的字符。
答案 1 :(得分:0)
如果您要检测所有特殊字符,请验证字符串是否仅包含您想要的字符,这样您未考虑的特殊字符就会被标记为特殊字符。这使您的代码适用于更多场景,并使其面向未来。
if(!name.match(/^[a-zA-Z0-9]+$/i)) {
// handle the case where there are special characters in the string
}
答案 2 :(得分:0)
你应该像这样逃避正则表达式的特殊角色。
[!\$&\*\-\\=^`|~#%'\+\?{}\._]
这些在正则表达式中具有特殊含义。
$*-\+?.
也许这也有效。
!/^[A-Za-z0-9]+$/.test('Hello2016')