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

Ger*_*ald 9 javascript regex

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

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

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

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

我错过了什么?提前致谢!

这是一个示例:

的jsfiddle

Mar*_*der 10

你有一个字符范围:)-=包括)和之间的所有ASCII字符=(包括数字).移动-到类的末尾或转义它:

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

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

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

请注意,在您的情况下,您可能需要使用test而不是match:

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

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

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

if (!/[^a-zA-Z0-9]/.test(testString)) {
   ...
Run Code Online (Sandbox Code Playgroud)

并包括您想要允许的所有字符.