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

时间:2019-08-01 15:57:14

标签: javascript html regex regex-negation

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

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

有效的输入字符串:

  
      
  1. AAss11
  2.   
  3. AA11 @@
  4.   
  5. aa11 @@
  6.   
  7. AAss @@
  8.   

无效的输入字符串:

  
      
  1. AAAAAA
  2.   
  3. AA11111
  4.   
  5. aa111111
  6.   
  7. AA @@@@@@@
  8.   
  9. AAss11 $
  10.   
  11. 1111111
  12.   
  13. @@@@@@@
  14.   
  15. $ 1Asssss
  16.   
  17. AAss11 @ $
  18.   

我写了这个正则表达式:

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

1 个答案:

答案 0 :(得分:3)

您可以执行所有迭代(4个中的3个)。如果ECMAScript新产品问世,
它支持条件(?(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"  +
"$1Asssss\n"  +
"AAss11@$\n";

var match;

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