我正在尝试验证密码输入字段,最小长度为8个字符,并且必须包含至少1个大写,1个小写,1个数字和1个特殊字符。 [如果密码有效,则标签变为绿色。如果它无效,则标签变为红色。]
我认为我得到了最小长度部分,但我不确定我是否正在为其他要求正确实现我的Javacsript。
function green() {
var pw = document.getElementById('password').value;
var pattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$";
if (pw.value == pattern) {
document.getElementById('pw').style.color = "Green";
document.getElementById('pw').innerHTML = "Password: ✔";
} else {
document.getElementById('pw').style.color = "Black";
document.getElementById('pw').innerHTML = "Password:";
}
}
<label id="pw" for="password">Password:</label>
<input id="password" name="password" minlength="8" maxlength="50" class="form-control" type="password" onkeyup="green()" value="" />
您的模式没问题,但您需要始终选择元素及其属性,并在适当的变量上调用适当的方法:
var pw = document.getElementById('password').value;
将值(字符串)放入pw
变量中,所以
if (pw.value == pattern) {
没有意义 - 字符串没有.value
属性。
例如,要定义正则表达式对象,请使用/
语法
var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
不是字符串语法("
分隔符),否则你只需要一个字符串。
要测试字符串是否通过正则表达式,可以在正则表达式上调用.test
,并传递要测试的字符串。
您分配给style.color
的字符串应该是小写的,而不是标题:
function green() {
var pwText = document.getElementById('password').value;
var pwElm = document.getElementById('pw');
var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
if (pattern.test(pwText)) {
pw.style.color = "green";
pw.innerHTML = "Password: ✔";
} else {
pw.style.color = "black";
pw.innerHTML = "Password:";
}
}
<label id="pw" for="password">Password:</label>
<input id="password" name="password" minlength="8" maxlength="50" class="form-control" type="password" onkeyup="green()" value="" />
此外,您可能会考虑向用户说明输入的密码不足,如果元素不够好,可能会将元素着色为红色:
function green() {
var pwText = document.getElementById('password').value;
var pwElm = document.getElementById('pw');
var pattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
if (pattern.test(pwText)) {
pw.style.color = "green";
pw.textContent = "Password: ✔";
} else {
pw.style.color = "red";
pw.textContent = "Password: ❌";
}
}
<label id="pw" for="password">Password:</label>
<input id="password" name="password" minlength="8" maxlength="50" class="form-control" type="password" onkeyup="green()" value="" />
我从来不擅长阅读/写正则表达式。我宁愿选择不同字符串中的不同类型的字符。这比使用正则表达式更多的代码,但可读性应该是可爱的。
function green() {
var password = document.getElementById('password').value;
var lowercase = 'abcdefgh.....xyz';
var uppercase = 'ABCDEFGH.....XYZ';
var digit = '1234567890';
var special = '§!"#¤%&/()=?@£$€{[]}+.....,<>;:_';
var valid = true;
if (!containsValidCharacter(password, lowercase)) {
valid = false;
}
if (!containsValidCharacter(password, uppercase)) {
valid = false; }
if (!containsValidCharacter(password, special)) {
valid = false;
}
if (!containsValidCharacter(password, digit)) {
valid = false;
}
if (password.length < 8) {
valid = false;
}
if (valid) {
document.getElementById('pw').style.color = "Green";
document.getElementById('pw').innerHTML = "Password: ✔";
} else {
document.getElementById('pw').style.color = "Black";
document.getElementById('pw').innerHTML = "Password:";
}
}
function containsValidCharacter(stringToTest, validCharacters) {
for (var i = 0; i < stringToTest.length; i++) {
if (validCharacters.indexOf(stringToTest.charAt(i)) !== -1) {
return true;
}
}
return false;
}
我很确定有一种简洁的方法来简化这个功能。祝好运。