包含至少 3 个以下 [0-9]、[a-z]、[A-Z] 或特殊字符($ 除外)的正则表达式

Regex containing at-least 3 of the following [0-9], [a-z], [A-Z] or special characters (except $)

我需要一个正则表达式来验证 HTML 中的输入字段。该模式应至少包含以下三项:

  1. 编号[0-9]
  2. 大写字母 [A-Z]
  3. 小写字母[a-z]
  4. 特殊字符($除外)
  5. 最小长度为 6。

有效的输入字符串:

  1. AAss11
  2. AA11@@
  3. aa11@@
  4. AAss@@

无效的输入字符串:

  1. AAAAAA
  2. AA11111
  3. aa111111
  4. AA@@@@@@
  5. AAss11$
  6. 1111111
  7. @@@@@@
  8. Asssss
  9. AAss11@$

我写了这个正则表达式:

    ^(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[^$])|((?=.*[A-Z])(?=.*[a-z])(?=.
[!#%&'()*+,-./:;<=>?@[\]^_`{|}~])[^$])|((?=.*[A-Z])(?=.*[0-9])(?=.
[!#%&'()*+,-./:;<=>?@[\]^_`{|}~])[^$])|((?=.*[a-z])(?=.*[0-9])(?=.
[!#%&'()*+,-./:;<=>?@[\]^_`{|}~])[^$])).{6,16}$

您可以进行所有迭代(4 次中的 3 次)。如果 ECMAScript new 出来,并且
它支持条件 (?(cond)yes|no) 这大大简化了。

这是乱序的:

^(?:(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])|(?=.*[0-9])(?=.*[a-z])(?=.*[!"#%&'()*,\-./:;?@[\]_{}])|(?=.*[0-9])(?=.*[A-Z])(?=.*[!"#%&'()*,\-./:;?@[\]_{}])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!"#%&'()*,\-./:;?@[\]_{}]))[0-9a-zA-Z!"#%&'()*,\-./:;?@[\]_{}]{6,16}$

展开视图

 ^ 
 (?:
      (?= .* [0-9] )
      (?= .* [a-z] )
      (?= .* [A-Z] )
      #(?= .*[!"#%&'()*,\-./:;?@[\]_{}] )

   |  
      (?= .* [0-9] )
      (?= .* [a-z] )
      #(?= .*[A-Z] )
      (?= .* [!"#%&'()*,\-./:;?@[\]_{}] )

   |  
      (?= .* [0-9] )
      #(?= .*[a-z] )
      (?= .* [A-Z] )
      (?= .* [!"#%&'()*,\-./:;?@[\]_{}] )

   |  
      #(?= .*[0-9] )
      (?= .* [a-z] )
      (?= .* [A-Z] )
      (?= .* [!"#%&'()*,\-./:;?@[\]_{}] )

 )
 [0-9a-zA-Z!"#%&'()*,\-./:;?@[\]_{}]{6,16} 
 $ 

JS 示例

var RxPwd = new RegExp("^(?:(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])|(?=.*[0-9])(?=.*[a-z])(?=.*[!\"#%&'()*,\-./:;?@[\]_{}])|(?=.*[0-9])(?=.*[A-Z])(?=.*[!\"#%&'()*,\-./:;?@[\]_{}])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!\"#%&'()*,\-./:;?@[\]_{}]))[0-9a-zA-Z!\"#%&'()*,\-./:;?@[\]_{}]{6,16}$", "mg");

var strPwdTest = 
// Should pass
"AAss11\n"  +
"AA11@@\n"  +
"aa11@@\n"  +
"AAss@@\n"  +
// Should fail
"AAAAAA\n"  +
"AA11111\n"  +
"aa111111\n"  +
"AA@@@@@@\n"  +
"AAss11$\n"  +
"1111111\n"  +
"@@@@@@\n"  +
"Asssss\n"  +
"AAss11@$\n";

var match;

while ( match = RxPwd.exec( strPwdTest ) )
{
    console.log( match[0], "\t ..Passed" );
}