我正在尝试使用正则表达式验证密码。如果我们将所有字符都作为字母,则密码会更新。我哪里错了?正则表达式对吗?
function validatePassword() {
var newPassword = document.getElementById('changePasswordForm').newPassword.value;
var minNumberofChars = 6;
var maxNumberofChars = 16;
var regularExpression = /^[a-zA-Z0-9!@#$%^&*]{6,16}$/;
alert(newPassword);
if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
return false;
}
if(!regularExpression.test(newPassword)) {
alert("password should contain atleast one number and one special character");
return false;
}
}
最佳答案
使用正 lookahead断言:
var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;
没有它,您当前的正则表达式只匹配您有 6 到 16 个有效字符,它不会验证它有至少一个数字,并且至少一个特殊字符。这就是上面的 lookahead 的目的。
(?=.*[0-9])
- 断言一个字符串至少有一个数字;(?=.*[!@#$%^&*])
- 断言一个字符串至少有一个特殊字符。
关于具有特殊字符的Javascript正则表达式密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090077/