此问题在此处已有答案:
Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters and special characters(42个答案)
昨天关门了。
我正在尝试做一个密码验证正则表达式,它必须要求大写,小写,特殊字符,数字,并且没有白色,所以我实现了以下RegEx:
/^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[.!@#$%^&*])[^\s][a-zA-Z0-9.!@#$%^&*][^\s]{8,16}$/
但我需要把超过8个字符的工作出于某种原因。
我输入的密码为:Yama#892
它应该是8个字符,但Regex不接受它,直到我像这样输入它,例如:Yama892
如果我是正确的,这是10个字符。
那么有些字符不算量词吗?如果不算,我怎么算所有8个字符?
下面是我的代码:
//...
const PASSWORD_REGEX =
"^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[.!@#$%^&*])[^\\s][a-zA-Z0-9.!@#$%^&*][^\\s]{8,16}$";
if (password && !password.match(PASSWORD_REGEX)) {
errors["password"] = "Password is invalid.";
}
//...
2条答案
按热度按时间v8wbuo2f1#
忽略了那些看客,它说:
删除
[\s]
-s(顺便说一句,\S
等同于它们),这样就可以正常工作了(you不需要空格检查
(?!.*\s)
,因为您限制了[a-zA-Z0-9.!@#$%^&*]
中的字符)sshcrbum2#
@Dimava的answer已经解释了为什么你的初始Regex不接受8个字符的密码。
你可以在下面找到你的代码的清理过的工作版本:
改进:
1.使用
\d
表示数字。1.使用
[^\w\s]
非字母数字字符。1.使用
test
而不是match
,因为我们不需要提取密码。1.使用Lookaheads来覆盖除字符数之外的所有条件。一旦Lookaheads就位,就可以使用
.{8,16}
作为密码尺子,而不必限制有效字符。