JavaScript密码验证正则表达式按分组顺序失败

时间:2015-11-11 04:15:26

标签: javascript regex

我的密码验证标准如下:

  • 必须至少包含两个小写字符
  • 必须至少包含两个大写字符
  • 必须至少包含两个数字字符
  • 必须至少包含两个特殊字符,即@#$%
  • 长度必须至少为11个字符

我尝试将其用于前四个标准:

/(?:\d{2,})(?:[a-z]{2,})(?:[A-Z]{2,})(?:[!"'#$&()*+-@,.:;<>=?^_`{|}~\/\\]{2,})/g

但是它与我期望的以下字符串不匹配:

12QAqa@#

但确实匹配:

12qaQA@#

验证标准不重要的顺序。如何重写正则表达式而不考虑订单?

1 个答案:

答案 0 :(得分:1)

以下似乎符合您的所有要求:

/*
Must contain at least two lower case characters
Must contain at least two upper case characters
Must contain at least two numeric characters
Must contain at least two special characters i.e. @#$%
Must be at least 11 characters long
*/

var password ='12qaQ@#123456789A';
var pattern  =/^(?=(.*[a-z]){2,})(?=(.*[A-Z]){2,})(?=(.*[0-9]){2,})(?=(.*[!@#\$%]){2,}).{11,}$/;

alert( pattern.test(password) ); 

https://jsfiddle.net/rryg67v1/1/

^                     // start of line
(?=(.*[a-z]){2,})     // look ahead and make sure at least two lower case characters exist
(?=(.*[A-Z]){2,})     // look ahead and make sure at least two upper case characters exist
(?=(.*[0-9]){2,})     // look ahead and make sure at least two numbers exist
(?=(.*[!@#\$%]){2,})  // look ahead and make sure at least two special characters exist
.{11,}                // match at least 11 characters
$                     // end of line            
祝你好运!!