Javascript正则表达式验证密码字符串(转义标点符号)

时间:2011-11-26 07:55:53

标签: javascript regex escaping punctuation

我正在尝试使用javascript验证密码字符串,并需要一些正则表达式的帮助。我已经尝试了一些教程,但我认为我在理解如何逃避量词和/或元字符时遇到了一些问题。

我想确保密码字符串只包含以下跨度中的一个或多个(最多32个)字符:

"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"012345678901234567890123456789"
"!@#%&/(){}[]=?+*^~-_.:,;"

前三个跨度非常简单,但我无法弄清楚最后一个。基本上我的脚本看起来像这样:

var password = "user_input_password";

if (/^[A-Za-z0-9!@#$%...]{1,32}$/.test(password)) {
    document.write('OK');
} else {
    document.write('Not OK');
}

非常感谢任何帮助或意见,谢谢!

3 个答案:

答案 0 :(得分:4)

通常,您可以使用反斜杠\来转义元字符;但是,在一个角色类中,你必须逃脱的只有]\-^在一开始只有意义)。像[\w!@#%&/(){}[\]=?+*^~\-.:,;]之类的东西会做你想要的。

\w等于[A-Za-z0-9_]

所以完整的测试将是这样的:

/^[\w!@#%&/(){}[\]=?+*^~\-.:,;]{1,32}$/.test(password)

答案 1 :(得分:2)

/^[A-Za-z0-9!@#%&\/(){}\[\]=?+*^~\-_\.:,;]{1,32}$/

答案 2 :(得分:0)

您还可以匹配所有不被视为空格的字符(空格,换行符,制表符)

/^[^\s]{1,32}$/.test(password);

要排除引号(我在您的示例中没有看到它们),您可以将它们添加到:

/^[^\s'"]{1,32}$/.test(password);