我对密码有以下要求:
密码必须包含以下两个组中的字符:
uppercase alphabet
lowercase alphabet
special characters [!@#$...]
我使用了以下正则表达式
^(?=.+?[0-9])((?=.*?[a-z])(?=.+?[A-Z]))|((?=.*?[a-z])(?=.+?[~!@#$%^&*()-_=+]))|((?=.+?[A-Z])(?=.+?[~!@#$%^&*()-_=+])).{8,}$
可以找到操场[here]
欣赏帮助
答案 0 :(得分:0)
尝试创建一个可能的字符值数组,使用Array.prototype.filter()
检查三个必需组中至少两个的输入字符串
var re = ["abcdefghijklmnopqrstuvwxyz"
, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
, "~!@#$%^&*()-_=+"];
var input = document.querySelector("input");
function check(e) {
var str = this.value;
var res = str.length >= this.size // check length
&& /[0-9]/.test(str) // check digit
&& re.filter(function(val) {
return new RegExp(str.split("").join("|")).test(val)
}).length >= 2; // check for at least two of three required groups
// do stuff
this.className = res ? "valid" : "invalid"
}
input.oninput = input.onfocus = check;
input.focus();
input.invalid {
outline: 2px solid red;
}
input.invalid + label {
display: block;
}
input.valid {
outline: 2px solid green;
}
label,
input.valid + label {
display: none;
}
<input type="text" size="8" required="true" id="p" />
<label for="p">Required:
<br>1. minimum length of 8 characters.
<br>2. password must contain a number.
<br>3. password must have characters from two of the following groups:
<br> a) uppercase alphabet
<br> b) lowercase alphabet
<br> c) special characters: ~!@#$%^&*()-_=+</label>