我对密码comlpexity有一套要求,我是解决方法的一部分,但在某些特定领域遇到了麻烦。我目前的表达如下:
^(?=(.*\d){2,4})(?=(.*[A-Z]))(?=(.*[a-z])).{8}$
此表达式(据我所知并经过测试)将需要一个8个字符的密码,其中至少包含一个大写字母,一个小写字母和至少两个数字但不超过4个。
我想实施的其余要求如下: - 包含至少3个不同的字母字符 - 不要以数字开头 - 不包含特殊字符 - 不要以三个相同的字符开头(即aaa,ccc)。
我非常感谢对此提供任何帮助或指导。
答案 0 :(得分:1)
这很有用。
(注意 - 建议您也排除空格)
# ^(?=.{8}$)(?!\d)(?=\PP*$)(?=(.)(?!\1\1))(?=.*[A-Z])(?=.*[a-z])(?=(?:\D*\d){2,4}\D*$)(?=.*([a-zA-Z]).*(?!\2)([a-zA-Z]).*(?!\2|\3)[a-zA-Z]).*$
^ # BOS
(?= .{8} $ ) # 8 characters total
(?! \d ) # Not start with digit
(?= \PP* $ ) # No Punct (special chars?)
(?= # Not start 3 identical chars
( . ) # (1)
(?! \1 \1 )
)
(?= .* [A-Z] ) # At least 1 upper
(?= .* [a-z] ) # At least 1 lower
(?= # At least 2 digits, no more than 4
(?: \D* \d ){2,4}
\D* $
)
(?= # At least 3 different alpha chars
.*
( [a-zA-Z] ) # (2)
.*
(?! \2 )
( [a-zA-Z] ) # (3)
.*
(?! \2 | \3 )
[a-zA-Z]
)
.*
$ # EOS
推荐 - RegexFormat4来阅读/维护代码。
Perl测试用例
if( '~5bC$=6c' =~ /^(?=.{8}$)(?!\d)(?=\PP*$)(?=(.)(?!\1\1))(?=.*[A-Z])(?=.*[a-z])(?=(?:\D*\d){2,4}\D*$)(?=.*([a-zA-Z]).*(?!\2)([a-zA-Z]).*(?!\2|\3)[a-zA-Z]).*$/)
{
print "Matched $&\n";
}
输出>>
Matched ~5bC$=6c