如何逃避特殊字符

时间:2016-05-13 01:29:51

标签: javascript regex string

我试图创建一个正则表达式来检测字符串是否有特殊字符。

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

在上一个示例中,它返回true。我想这与=符号有关,但我不知道它的错误在哪里。

3 个答案:

答案 0 :(得分:3)

实际上是因为-字符。在字符类([...])内部,它表示一系列字符。例如,[a-f]将匹配abcde,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')