如何最小化这些参数

时间:2010-11-09 08:00:10

标签: jquery

(function ($) {
    var LOWER = /[a-z]/,
        UPPER = /[A-Z]/,
        DIGIT = /[0-9]/,
        DIGITS = /[0-9].*[0-9]/,
        SPECIAL = /[^a-zA-Z0-9]/,
        SAME = /^(.)\1+$/;

    function rating(rate, message) {
        return {
            rate: rate,
            messageKey: message
        };
    }

    function uncapitalize(str) {
        return str.substring(0, 1).toLowerCase() + str.substring(1);
    }

    $.validator.passwordRating = function (password, username) {

        if (!password || password.length < 5) return rating(0, "too-short");

        if (username && password.toLowerCase().match(username.toLowerCase())) return rating(0, "similar-to-username");

        if (SAME.test(password)) return rating(1, "very-weak");

        var lower = LOWER.test(password),
            upper = UPPER.test(uncapitalize(password)),
            digit = DIGIT.test(password),
            digits = DIGITS.test(password),
            special = SPECIAL.test(password);


        if (lower && upper && digit && digits && special && password.length > 19 || 
            lower && upper && special && digit && digits && password.length > 19 ||
            lower && special && upper && digit && digits && password.length > 19 ||
            lower && special && digit && digits && upper && password.length > 19 || 
            lower && digit && digits && special && upper && password.length > 19 || 
            lower && digit && digits && upper && special && password.length > 19 ||

            upper && lower && digit && digits && special && password.length > 19 || 
            upper && lower && special && digit && digits && password.length > 19 || 
            upper && special && lower && digit && digits && password.length > 19 || 
            upper && special && digit && digits && lower && password.length > 19 || 
            upper && digit && digits && special && lower && password.length > 19 || 
            upper && digit && digits && lower && special && password.length > 19 ||

            digit && digits && lower && upper && special && password.length > 19 || 
            digit && digits && lower && special && upper && password.length > 19 || 
            digit && digits && special && lower && upper && password.length > 19 || 
            digit && digits && special && upper && lower && password.length > 19 || 
            digit && digits && upper && special && lower && password.length > 19 || 
            digit && digits && upper && lower && special && password.length > 19 ||


            special && lower && upper && digit && digits && password.length > 19 || 
            special && lower && digit && digits && upper && password.length > 19 ||
            special && digit && digits && lower && upper && password.length > 19 ||
            special && digit && digits && upper && lower && password.length > 19 || 
            special && upper && digit && digits && lower && password.length > 19 || 
            special && upper && lower && digit && digits && password.length > 19 || 
            upper && lower && digit && special && password.length > 19 ) { 
               return rating(5, "very-strong");
           }

        if (lower && upper && digit && digits && special && password.length > 8 ||
            lower && upper && special && digit && digits && password.length > 8 ||
            lower && special && upper && digit && digits && password.length > 8 ||
            lower && special && digits && digit && upper && password.length > 8 ||
            lower && digit && digits && special && upper && password.length > 8 || 
            lower && digit && digits && upper && special && password.length > 8 ||

            upper && lower && digit && digits && special && password.length > 8 ||
            upper && lower && special && digit && digits && password.length > 8 ||
            upper && special && lower && digit && digits && password.length > 8 ||
            upper && special && digit && digits && lower && password.length > 8 || 
            upper && digit && digits && special && lower && password.length > 8 || 
            upper && digit && digits && lower && special && password.length > 8 ||

            digit && digits && lower && upper && special && password.length > 8 ||
            digit && digits && lower && special && upper && password.length > 8 ||
            digit && digits && special && lower && upper && password.length > 8 || 
            digit && digits && special && upper && lower && password.length > 8 ||
            digit && digits && upper && special && lower && password.length > 8 || 
            digit && digits && upper && lower && special && password.length > 8 ||

            special && lower && upper && digit && digits && password.length > 8 ||
            special && lower && digit && digits && upper && password.length > 8 ||
            special && digit && digits && lower && upper && password.length > 8 ||
            special && digit && digits && upper && lower && password.length > 8 || 
            special && upper && digit && digits && lower && password.length > 8 || 
            special && upper && lower && digit && digits && password.length > 8 || 
            special && lower && upper && digit && digits && password.length > 8 || 
            special && lower && digit && digits && upper && password.length > 8 || 
            special && digit && digits && lower && upper && password.length > 8 || 
            special && digit && digits && upper && lower && password.length > 8 || 
            special && upper && digit && digits && lower && password.length > 8 ||
            special && upper && lower && digit && digits && password.length > 8 || 
            upper && lower && digit && special && password.length > 8) {
                return rating(4, "strong");
           }



        if (lower && upper && digit && digits && password.length > 5 ||
            lower && upper && digit && digits && password.length > 5 ||
            lower && upper && digit && digits && password.length > 5 ||
            lower && digit && digits && upper && password.length > 5 || 
            lower && digit && digits && upper && password.length > 5 || 
            lower && digit && digits && upper && password.length > 5 ||

            upper && lower && digit && digits && password.length > 5 ||
            upper && lower && digit && digits && password.length > 5 ||
            upper && lower && digit && digits && password.length > 5 || 
            upper && digit && digits && lower && password.length > 5 || 
            upper && digit && digits && lower && password.length > 5 || 
            upper && digit && digits && lower && password.length > 5 ||

            digit && digits && lower && upper && password.length > 5 || 
            digit && digits && lower && upper && password.length > 5 ||
            digit && digits && lower && upper && password.length > 5 ||
            digit && digits && upper && lower && password.length > 5 ||
            digit && digits && upper && lower && password.length > 5 || 
            digit && digits && upper && lower && password.length > 5 ||

            lower && upper && digit && digits && password.length > 5 ||
            lower && digit && digits && upper && password.length > 5 ||

            digit && digits && lower && upper && password.length > 5 ||
            digit && digits && upper && lower && password.length > 5 ||

            upper && digit && digits && lower && password.length > 5 ||
            upper && lower && digit && digits && password.length > 5 ||

            lower && upper && digit && digits && password.length > 5 ||
            lower && digit && digits && upper && password.length > 5 ||

            digit && digits && lower && upper && password.length > 5 || 
            digit && digits && upper && lower && password.length > 5 ||

            digit && upper && lower && password.length < 8 ||
            digit && lower && upper && password.length < 8 || 
            digits && upper && lower && password.length < 8 ||
            digits && lower && upper && password.length < 8 ||

            upper && digit && digits && lower && password.length < 8 ||
            upper && lower && digit && digits && password.length < 8 ||
            upper && lower && digit && special && password.length < 8) {
               return rating(3, "good");
            }
        return rating(2, "weak");
    }

    $.validator.passwordRating.messages = {
        "similar-to-username": "Too similar to username",
        "too-short": "Too short",
        "very-weak": "Very weak",
        "weak": "Weak",
        "good": "Good",
        "strong": "Strong",
        "very-strong": "Very Strong"
    }

    $.validator.addMethod("password", function (value, element, usernameField) {
        // use untrimmed value
        var password = element.value,
            // get username for comparison, if specified
            username = $(typeof usernameField != "boolean" ? usernameField : []);

        var rating = $.validator.passwordRating(password, username.val());
        // update message for this field
        var meter = $(".password-meter", element.form);

        meter.find(".password-meter-bar").removeClass().addClass("password-meter-bar").addClass("password-meter-" + rating.messageKey);
        meter.find(".password-meter-message").removeClass().addClass("password-meter-message").addClass("password-meter-message-" + rating.messageKey).text($.validator.passwordRating.messages[rating.messageKey]);
        // display process bar instead of error message
        return rating.rate > 2;
    }, "&nbsp;");
    // manually add class rule, to make username param optional
    $.validator.classRuleSettings.password = {
        password: true
    };
})(jQuery);

2 个答案:

答案 0 :(得分:1)

我会做类似的事情:

special = SPECIAL.test(password) ? 1 : 0;
digits = DIGITS.test(password) ? 1 : 0;
...
length = password.length > 19 ? 2 : (password.length > 8 ? 1 : 0);

strength = special + digits + ... + length;

答案 1 :(得分:0)

使用简单的JavaScript函数

可以完成另一种方法
           checkStrength(password) {
           var numbers = "0123456789";
           var lowercase = "abcdefghijklmnopqrstuvwxyz";
           var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
           var punctuation = "!.@$£#*()%~<>{}[]?\\\"+-";

           var strength = 0;
           var fNumber = false;
           var fLower = false;
           var fUpper = false;
           var fPanctuation = false;
           var progressBar = document.getElementById("passIndicator");
           var progState = document.getElementById("progState");

           progressBar.className = "pwd_strength";  
           if (contains(password, numbers) > 0) {
       var fNumber = true;
           }
           if (contains(password, lowercase) > 0) {
       var fLower = true;
           }
          if (contains(password, uppercase) > 0) {
      var fUpper = true;
          }
         if (contains(password, punctuation) > 0) {
     var fPanctuation = true;
         }
         if (fNumber == true && (fLower == true || fUpper == true)) {
     strength += 1;
     progState.className = "pwd_strength_1";
     if (fNumber == true && fLower == true && fUpper == true) {
        strength += 1;
        progState.className = "pwd_strength_2";
        if (password.length >=8) {
            strength += 1;
            progState.className = "pwd_strength_3";
            if (fPanctuation == true) {
                strength += 1;
                progState.className = "pwd_strength_4";
                if (password.length >=10) {
                    strength += 1;
                    progState.className = "pwd_strength_5";
                }
            }
        }
        }
            }else {
        progState.className = "pwd_strength_0";
            }
                }

               function contains(password, validChars) {
           count = 0;
           for (i = 0; i < password.length; i++) {
       var char = password.charAt(i);
       if (validChars.indexOf(char) > -1) {
        count++;
        }
            }
           return count;
              }`