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

标签 javascript regex

我的密码验证标准如下:

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

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

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

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

12QAqa@#

但它确实匹配:

12qaQA@#

验证标准的顺序并不重要。我如何重写正则表达式以不考虑顺序?

最佳答案

以下似乎可以满足您的所有要求:

/*
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            

祝你好运!

关于JavaScript 密码验证正则表达式按分组顺序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33644190/

相关文章:

javascript - 如何获取mp3文件的大小和持续时间?

javascript - Proxy() block 作用域 - Javascript

c# - 使用 RegEx 仅替换引号外的字符串

Javascript - 正则表达式 - 获取介于/*color_1*/和/*color_1_end*/之间的字符串

仅用于数字的 Javascript 正则表达式接受 # $ % & (

javascript - 等效于没有动画的 Window.scrollTo()?

javascript - 如何使用 Watson Conversation 在屏幕上显示多条消息

javascript - qUnit拆解方法

java - 检查字符串是否包含另一个整个字符串

php - 使用正则表达式从内容过滤youtube链接