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

4

我正在尝试使用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个回答

4
一般情况下,您可以使用反斜杠\来转义元字符;然而,在字符类中,您需要转义的只有]\-^仅在开头有意义)。像[\w!@#%&/(){}[\]=?+*^~\-.:,;]这样做即可达到您的要求。 \w等同于[A-Za-z0-9_]
因此完整的测试代码应该是这样的:
/^[\w!@#%&/(){}[\]=?+*^~\-.:,;]{1,32}$/.test(password)

1
你还需要转义“-”符号。它定义了[]内的范围。 - Nakul
是的,你说得对。我甚至在我的答案中注意到了这一点,但没有将其包含在代码中。 - Tikhon Jelvis

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

我认为您不需要转义 [./ - Tikhon Jelvis

0

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

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接