我正在尝试编写密码验证程序。密码具有以下条件。
至少7个字符。
并且应该包括以下4个中的3个:
目前的正则表达式:
/(^(?=.[^!@#$%^&*()'":;]{6,128}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*)/
有没有办法编写正则表达式来满足4个密码要求中的3个?
答案 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;
如果您需要我的意见,这些对用户来说真的很令人沮丧。我只需要设置最少8个字符的长度并为其保留密码安全性。