正则表达式的规则是:至少 8 个字符,至少使用以下之一:(&%$^#@=),至少有 2 个既不在开头也不在结尾的数字 NOR它们可以在密码中彼此相邻吗?至少有 2 个大写字符和 2 个小写字符。这是我到目前为止所拥有的。我不知道如何让正则表达式不关心字符的顺序。而且我也不知道如何使整个事情需要 8 个字符。
/^[&%$^#@=]{1,}.[0-9(?!0-9)0-9(?!\s)]{2,}[A-Z]{2,}[a-z]{2,}$/;
最佳答案
此经过测试的 JavaScript 函数包含一个带注释的正则表达式,可满足您的验证要求:
function valid_password(text) {
/*#!(?#!js re_password Rev:20160409_0700)
# Password validation with multiple requirements.
^ # Anchor to start of string.
(?=[^&%$^#@=]*[&%$^#@=]) # Use at least one (&%$^#@=).
(?=(?:\D*\d){2}) # Have at least 2 numbers.
(?!\d) # Numbers not at the beginning.
(?!.*\d$) # Numbers not at the end.
(?=\D*(?:\d\D+)+$) # Numbers not next to each other.
(?=(?:[^A-Z]*[A-Z]){2}) # At least 2 uppercase.
(?=(?:[^a-z]*[a-z]){2}) # At least 2 lowercase.
.{8,} # Be at least 8 characters.
$ # Anchor to end of string.
!#*/
var re_password = /^(?=[^&%$^#@=]*[&%$^#@=])(?=(?:\D*\d){2})(?!\d)(?!.*\d$)(?=\D*(?:\d\D+)+$)(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[^a-z]*[a-z]){2}).{8,}$/;
if (text.match(re_password)) { return true; }
return false;
}
请注意,此正则表达式演示了如何在字符串开头的位置应用多个 AND 逻辑条件。另请注意,上面正则表达式中数字要求的多个条件可以合并为单个断言 - 它们在此处以详细形式(多个断言样式)呈现,以演示所使用的技术。
希望这有帮助!
关于javascript - 我必须制作一个正则表达式,但无法弄清楚语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36517322/