密码标准3中的4个

时间:2017-03-15 19:02:47

标签: javascript jquery regex

我正在尝试编写密码验证程序。密码具有以下条件。

  1. 至少7个字符。

  2. 并且应该包括以下4个中的3个:

    • 一个数字
    • 大写
    • 小写
    • 特殊字符(例如!@#)
  3. 目前的正则表达式:

    /(^(?=.[^!@#$%^&*()'":;]{6,128}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*)/
    

    有没有办法编写正则表达式来满足4个密码要求中的3个?

1 个答案:

答案 0 :(得分:0)

对于所有4,你正在寻找这个:

/^(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[a-z])(?=.*[^A-Za-z0-9\s])(?=.{7,})/

您列出的每个条件的多个正向前瞻。

如果您想要4个中的3个,您可以编写四个中的三个的排列,这非常混乱:

/^((?=.*?[A-Z])(?=.*?[a-z])(?=.*[^A-Za-z0-9\s])|(?=.*?[0-9])(?=.*?[a-z])(?=.*[^A-Za-z0-9\s])|(?=.*?[0-9])(?=.*?[A-Z])(?=.*[^A-Za-z0-9\s])|(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[a-z]))(?=.{7,})/

如果您愿意,请运行示例:



var regex = /^((?=.*?[A-Z])(?=.*?[a-z])(?=.*[^A-Za-z0-9\s])|(?=.*?[0-9])(?=.*?[a-z])(?=.*[^A-Za-z0-9\s])|(?=.*?[0-9])(?=.*?[A-Z])(?=.*[^A-Za-z0-9\s])|(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[a-z]))(.{7,})/
pw = document.getElementById("pw");
pw.oninput = function(e) {
  if (regex.test(e.target.value)) {
    pw.className = "valid";
  } else {
    pw.className = "invalid";
  }
};

html {
  font-family: sans-serif;
}
input {
  border: 1px solid #a0a0a0;
  padding: 5px;
  outline: none;
}

input.invalid {
  border: 1px solid #c0392b;
}

input.valid {
  border: 1px solid #27ae60;
}

<label>Type a password: <input id="pw" type="text"/></label>
&#13;
&#13;
&#13;

如果您需要我的意见,这些对用户来说真的很令人沮丧。我只需要设置最少8个字符的长度并为其保留密码安全性。