-2

我正在寻找满足以下密码强度要求的正则表达式:

  • 最少 8 个字符
  • 至少一个大写字符
  • 至少一个数字 (0-9)
  • 至少一个特殊字符 (!,@,#,$,%,^,&,*,?,_,~,-,(,))

我需要能够使用jquery.validate.password.js插件对其进行评估。

此外,是否可以根据他们缺少的标准向用户提供反馈?例如,如果用户缺少一个大写字符,我可以吐回一条消息告诉他们吗?他们提供了一个示例,展示了如何传递不同的验证消息:

var originalPasswordRating = $.validator.passwordRating;
$.validator.passwordRating = function(password, username) {
    if (password.length < 100) {
        return { rate: 0, messageKey: "too-short" };
    }
};

$.validator.passwordRating.messages = $.extend(originalPasswordRating.messages, {
    "too-short": "Your password must be longer than 100 chars"
});
4

3 回答 3

4

听起来您想运行一系列正则表达式并单独存储结果。就个人而言,它们是微不足道的。在 JavaScript 中:

var password = "P@ssw0rd";
var validLength = /.{8}/.test(password);
var hasCaps = /[A-Z]/.test(password);
var hasNums = /\d/.test(password);
var hasSpecials = /[~!,@#%&_\$\^\*\?\-]/.test(password);

var isValid = validLength && hasCaps && hasNums && hasSpecials;

http://jsfiddle.net/RichardTowers/cAuTf/

请注意,即使有规则,人们也可以选择非常弱的密码。

于 2012-06-18T16:24:03.170 回答
1

我从来没有使用过那个插件,但我相信这样的东西应该适合你:

var originalPasswordRating = $.validator.passwordRating;
var upperCaseRegex = /[A-Z]+/;
var numberRegex = /[0-9]+/
var specialCharRegex = /[\!\@\#\$\%\^\&\*\?\_\~\-\(\)]+/;
$.validator.passwordRating = function(password, username) {
    if (password.length < 8) {
        return { rate: 0, messageKey: "too-short" };
    } else if(!password.match(upperCaseRegex)) {
        return { rate: 0, messageKey: "no-upper" };
    } else if(!password.match(numberRegex)) {
        return { rate: 0, messageKey: "no-number" };
    } else if(!password.match(specialCharRegex)) {
        return { rate: 0, messageKey: "no-special" };
    }

};

免责声明:我没有测试过任何这段代码,但我相信这应该为您指明正确的方向。

您将需要使用我在示例中创建的“messageKeys”创建相应的消息...

于 2012-06-18T16:17:10.630 回答
0

尝试这个..

function validatePass(pswd) {

var validLength = /.{8,}/.test(pswd);
var hasCaps = /[A-Z]/.test(pswd);
var hasLower = /[a-z]/.test(pswd);
var hasNums = /\d/.test(pswd);
var hasSpecials = /[~!,@#%&_\$\^\*\?\-]/.test(pswd);

if (validLength){                   // VALIDO LA LONGITUD 8 O MÁS
    if (hasCaps){                   // VALIDO SI HAY MAYÚSCULAS
        if (hasLower){              // VALIDO SI HAY MINÚSCULAS
            if (hasNums){           // VALIDO SI HAY NÚMEROS
                if (hasSpecials){   // VALIDO SI HAY CARACTERES ESPECIALES
                    return 0;
                } else return 5;    // NO HAY CARACTERES ESPECIALES
            } else return 4;        // NO HAY NÚMEROS
        } else return 3;            // NO HAY MINÚSCULAS
    } else return 2;                // NO HAY MAYÚSCULAS
  } else return 1;                  // LA LONGITUD ES INFERIOR A 8
}

像这样检查密码..

 var valid_str = validatePass(renew_pass);
    
 if (valid_str == 1){
      alert("Mínimo 8 caracteres");
                
 } else if (valid_str == 2){ // NO HAS UPPERCASE 
      alert("NO HAS UPPERCASE");
    
 } else if (valid_str == 3){ // NO HAS LOWERCASE 
      alert("NO HAS LOWERCASE");
        
 } else if (valid_str == 4){ // NO HAS NUMS
      alert("NO HAS NUMS");
        
 } else if (valid_str == 5) { // NO HAS SPECIAL CHARACTERS
      alert("NO HAS SPECIAL CHARACTERS");
    
 }
于 2021-12-29T10:44:51.283 回答