javascript - 4 个条件中的 2+ 个正则表达式

标签 javascript regex

我对用户密码有4个要求:

  • 至少 1 个 a-z 字符
  • 至少 1 个 A-Z 字符
  • 至少 1 0-9 个字符
  • 中至少有 1 个符号.!@#$%^&*()_

但是,用户只需满足 4 个条件中的 2 个以上。

密码 VVVV1111!234567AaAaAaAaA1!aA1!a 有效,密码 VVVVVVVV12345678aaaaaaa!!!!!!! 不是。

如何制作 2 of 4 OR 正则表达式?

我想出了 3 个条件(A-Z、a-z 和 0-9):

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

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

最佳答案

总是把大问题分解成小问题。

为四个不同条件中的每一个定义一个单独的正则表达式,然后检查是否满足了足够多的条件。

例如:

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;

最后,强制性的 xkcd 漫画:

xkcd

关于javascript - 4 个条件中的 2+ 个正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42719722/

相关文章:

javascript - d3.csv 链接 GitHub

Java - 分割目录路径的正则表达式

javascript - 在jquery中获取多个延迟对象的响应

javascript - 如何在 javascript 中创建一个单词所有可能的字谜列表?

javascript - 有没有办法让触摸启动事件不触发点击事件?

javascript - 检查字符串是否为字母且不包含某些特定单词

php - 长时间运行的控制台命令速度变慢

javascript - 悬停时的 Bootstrap 弹出窗口链接不可点击

c# - 正则表达式捕获

Java String Regex 分割并捕获分割部分