正则表达式不允许某些特殊字符

时间:2013-08-23 08:16:13

标签: javascript regex

我有以下正则表达式,不允许使用某些特殊字符:

if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){    
    alert("password not valid");
}
else
{
    alert("password valid");
}

这很有效。如果密码不包含括号(~,.<>;':"\/\[\]\|{}()-=_+)内的任何特殊字符,则此正则表达式将接受密码。

我的问题是它也不允许我输入奇怪的数字。

我在这里错过了什么?提前谢谢!

以下是一个示例:

jsFiddle

1 个答案:

答案 0 :(得分:10)

你有一个字符范围:)-=包括)=之间的所有ASCII字符(包括数字)。将-移到课程的末尾或将其转义:

/[`~,.<>;':"\/\[\]\|{}()=_+-]/

此外,您无需转义所有这些字符:

/[`~,.<>;':"/[\]|{}()=_+-]/

请注意,在您的情况下,使用test代替match可能就足够了:

if (/[`~,.<>;':"/[\]|{}()=_+-]/.test(testString))){
    ...

test返回一个布尔值(这就是你所需要的),而match返回一个包含所有捕获组的数组(无论如何你都要丢弃)。

请注意,正如Daren Thomas在评论中指出的那样,您应该决定要允许哪些字符。因为当前的方法不会处理各种奇怪的Unicode字符,而是抱怨一些相当标准的字符,如_。要创建白名单,您可以简单地反转字符类和条件:

if (!/[^a-zA-Z0-9]/.test(testString)) {
   ...

并包含您想要允许的所有字符。