我有以下正则表达式,不允许某些特殊字符:
if (testString.match(/[`~,.<>;':"\/\[\]\|{}()-=_+]/)){
alert("password not valid");
}
else
{
alert("password valid");
}
Run Code Online (Sandbox Code Playgroud)
这很有效.如果密码不包含括号内的任何特殊字符,则此正则表达式将接受密码(~,.<>;':"\/\[\]\|{}()-=_+).
我的问题是它也不允许我输入奇怪的数字.
我错过了什么?提前致谢!
这是一个示例:
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)
并包括您想要允许的所有字符.