正则表达式中有2+个正则表达式

Vla*_*mir 1 javascript regex

我有4个用户密码要求:

  • 至少1个az char
  • 至少1个AZ char
  • 至少1 0-9个字符
  • 至少有1个符号 .!@#$%^&*()_

但是,用户必须满足4个条件中的2个以上.

密码VVVV1111,!234567,AaAaAaAa或者A1!aA1!a是有效的,密码VVVVVVVV,12345678,aaaaaaa,!!!!!!!都没有.

如何制作2个4或者正则表达式中的2个?

我想出了3个条件(AZ,az和0-9):

^((?=.*?[A-Z])|(?=.*?[0-9]))((?=.*?[a-z])|((?=.*?[A-Z])(?=.*?[0-9]))).{8,30}$
Run Code Online (Sandbox Code Playgroud)

但我认为必须有一个更好的选择,因为这个正则表达式在第四个条件下变得非常大.

Nie*_*sol 7

始终将大问题分解为较小的问题.

为您的四种不同条件中的每一种定义一个单独的正则表达式,然后检查是否满足它们.

例如:

var checks = {
    lowercase: /[a-z]/,
    uppercase: /[A-Z]/,
    number: /[0-9]/,
    symbol: /[.!@#$%^&*()_]/
}, passcount = 0, results = {};
for( var k in checks) if( checks.hasOwnProperty(k)) {
    if( checks[k].test(password)) {
        passcount++;
        results[k] = true;
    }
    else results[k] = false;
}
if( passcount < 2) {
    alert("Your password didn't meet enough conditions.\n" +
      "[Provide useful info here - 'results' object lists " +
      "whether each test passed or failed, so use that for " +
      "a user-friendly experience!]");
    return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)

最后,强制性的xkcd漫画:

XKCD