[英]Regex not allowing certain special characters
我有以下正则表达式,不允许某些特殊字符:
if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){
alert("password not valid");
}
else
{
alert("password valid");
}
这很有效。 如果该正则表达式不包含括号内的任何特殊字符(~,.<>;':"\\/\\[\\]\\|{}()-=_+)
则会接受该密码。
我的问题是它也不允许我输入奇怪的数字。
我错过了什么? 提前致谢!
这是一个示例:
你有一个字符范围:) )-=
包括之间的所有ASCII字符)
和=
(包括数字)。 移动-
到类的末尾或转义它:
/[`~,.<>;':"\/\[\]\|{}()=_+-]/
此外,您不需要转义所有这些字符:
/[`~,.<>;':"/[\]|{}()=_+-]/
请注意,在您的情况下,使用test
而不是match
可能就足够了:
if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){
...
test
返回一个布尔值(这是你所需要的),而match
返回一个包含所有捕获组的数组(无论如何你都要丢弃)。
请注意,正如Daren Thomas在评论中指出的那样,您应该决定要允许哪些字符。 因为当前的方法不会处理各种奇怪的Unicode字符,而是抱怨像_
这样的一些相当标准的字符。 要创建白名单,您可以简单地反转字符类和条件:
if (!/[^a-zA-Z0-9]/.test(testString)) {
...
并包括您想要允许的所有字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.