开发者问题收集

具有特殊字符的 JavaScript 正则表达式密码验证

2012-08-23
354772

我正在尝试使用正则表达式验证密码。如果我们将所有字符都作为字母,则密码会更新。我哪里错了?正则表达式正确吗?

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;
    }
}
3个回答

使用正向 前瞻 断言:

var regularExpression = /^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{6,16}$/;

如果没有它,您当前的正则表达式只会匹配 6 到 16 个有效字符,它 不会 验证它是否至少有一个数字,并且 至少 有一个特殊字符。这就是上面的前瞻的作用所在。

  • (?=.*[0-9]) - 断言字符串至少有一个数字;
  • (?=.*[!@#$%^&*]) - 断言字符串至少有一个特殊字符。
João Silva
2012-08-23

我使用以下脚本设置最少 8 个字母的密码,其中至少包含一个符号、一个大写字母和一个小写字母以及一个数字

function checkPassword(str)
{
    var re = /^(?=.*\d)(?=.*[!@#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
    return re.test(str);
}
Rujoota Shah
2016-12-02
function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters"); 
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter.");
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit."); 
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}

以下答案存在问题,因为在检查字符和数字时由于缺少 [ ] 而未检查整个字符串,这是正确的版本

atul-tagra
2013-05-23