Password Strength Checker

by ninty9notout

HTML

<input type="text" class="strength">

JavaScript

;(function($, window, document, undefined) {
    $.fn.password = function(options) {
        
        var options = $.extend({}, {
            // Additions
            baseMultiplier: 40,
            uppercase: 2,
            lowercase: 2,
            number: 4,
            symbol: 6,
            // Deductions
            lettersOnly: 1,
            numbersOnly: 1,
            repeatCharacters: 1,
            consecutiveUppercaseLetters: 1,
            consecutiveLowercaseLetters: 1,
            consecutiveNumbers: 1
        }, options);
        
        $(this).each(function() {
            var
                $t = $(this),
                span = $('<span>Score: 0</span>'),
                score = 0;
            
            $t.on("keyup", function() {
                var
                    length = $t.val().length,
                    value = $t.val(),
                    array = value.split("");
                
                score = length * options.baseMultiplier;
                
                for(var i in array) {
                    var l = array[i];
                    
                    if(/[A-Z]/.test(l)) {
                        score += options.uppercase;
                    } else if(/[a-z]/.test(l)) {
                        score += options.lowercase;
                    } else if(/\d/.test(l)) {
                        score += options.number;
                    } else if(/[£$%^&\*;:@~.,!# ]/.test(l)) {
                        score += options.symbol;
                    }
                }
                
                if(/^[A-Z]+$/.test(value)) {
                    alert("all lower");
                } else if(/^[a-z]+$/.test(value)) {
                    alert("all upper");
                }
                
                span.html("Score: " + score);
            });
            
            $t.after(span);
        });
    }
})(jQuery, window, document);

$('.strength').password();