我试图创建一个正则表达式来检测字符串是否有特殊字符。如何转义特殊字符
/[!$&*-\=^`|~#%'+?{}._]+/.test('Hello2016'); // returns true when should return false because there's no special character
在上例中,它返回true。我想这跟=
这个符号有关,但我不知道这是什么错误。
我试图创建一个正则表达式来检测字符串是否有特殊字符。如何转义特殊字符
/[!$&*-\=^`|~#%'+?{}._]+/.test('Hello2016'); // returns true when should return false because there's no special character
在上例中,它返回true。我想这跟=
这个符号有关,但我不知道这是什么错误。
实际上是因为-
这个字符。在字符类([...]
)内部,它表示一系列字符。例如,[a-f]
将匹配a
,b
,c
, d
,e,
或f
。
正确的模式应该是:
/[!$&*\-=^`|~#%'+?{}._]+/
您还没有实际指定你考虑一个“特殊字符”,但一个简单得多的模式将是:
/[^\W_]/
这将匹配下划线或任何不是拉丁字母或小数位的字符(\W
)。
如果您想要检测所有特殊字符,请确认该字符串仅包含所需的字符,这样,您未考虑的特殊字符将被标记为特殊字符。这使得您的代码适用于更多的场景,并使其成为未来的证明。
if(!name.match(/^[a-zA-Z0-9]+$/i)) {
// handle the case where there are special characters in the string
}
你应该逃避正则表达式这样的特殊字符。
[!\$&\*\-\\=^`|~#%'\+\?{}\._]
这些在正则表达式中有特殊含义。
$*-\+?.
也许这也适用。
!/^[A-Za-z0-9]+$/.test('Hello2016')
什么是特殊字符?任何不是-Z 0-9?那么sheeldotme已经回答了你的问题。如果您正在使用用户输入并希望将其用作正则表达式,那么aldanux注释将有所帮助,或者您可以查看google是如何实现的:https://github.com/google/closure-library/blob/master/closure/ goog /字符串/ string.js#L1134 – HMR