密码的正则表达式 - 不包含,不包含

时间:2014-03-07 15:41:42

标签: regex passwords expression

我对密码comlpexity有一套要求,我是解决方法的一部分,但在某些特定领域遇到了麻烦。我目前的表达如下:

^(?=(.*\d){2,4})(?=(.*[A-Z]))(?=(.*[a-z])).{8}$

此表达式(据我所知并经过测试)将需要一个8个字符的密码,其中至少包含一个大写字母,一个小写字母和至少两个数字但不超过4个。

我想实施的其余要求如下: - 包含至少3个不同的字母字符 - 不要以数字开头 - 不包含特殊字符 - 不要以三个相同的字符开头(即aaa,ccc)。

我非常感谢对此提供任何帮助或指导。

1 个答案:

答案 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