"Password Strength Finder"
Bootstrap 3.3.0 Snippet by thrirumani

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script> <script src="//code.jquery.com/jquery-1.11.1.min.js"></script> <!------ Include the above in your HEAD tag ----------> <div class="container"> <div class="row"> <div class="row"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <div class="panel panel-default"> <div class="panel-body"> <div class="text-center"> <h3><i class="glyphicon glyphicon-lock" style="font-size:300%;"></i></h3> <h2 class="text-center">Password Strength Finder</h2> <div class="panel-body"> <form class="form"> <fieldset> <div class="form-group"> <label>Password</label> <div class="input-group"> <div class="input-group-addon"><i class="glyphicon glyphicon-wrench" ></></i> </div> <input class="form-control" data-val="true" data-val-length="password must be between 6 and 100 characters long." data-val-length-max="100" data-val-length-min="6" data-val-required="password is required" id="Password" name="Password" placeholder="min 6 characters" rows="12" type="password" /> </div> </div> <div class="form-group"> <label>Strength</label> <div id="pw-val-container"> <div id="pw-val-progress"></div> <div id="pw-val-verdict"></div> <div id="pw-val-errors"></div> </div> </div> </fieldset> </form> <a hreh="http://www.hackandphp.com/blog">My Website</a> </div> </div> </div> </div> </div> </div> </div> </div> </div>
$(document).ready(function () { "use strict"; var options = {}; options.ui = {showErrors:false, showVerdictsInsideProgressBar:true, container:'#pw-val-container',viewports:{progress:'#pw-val-progress',verdict:'#pw-val-verdict',errors:'#pw-val-errors'}}; $('#Password').pwstrength(options); }); ! function(n) { var r = {}, n, u, t, i, f; try { !n && module && module.exports && (n = require("jquery"), u = require("jsdom").jsdom, n = n(u().parentWindow)) } catch (e) {}! function(n, t) { "use strict"; var i = {}; t.forbiddenSequences = ["0123456789", "abcdefghijklmnopqrstuvwxyz", "qwertyuiop", "asdfghjkl", "zxcvbnm", "!@#$%^&*()_+"]; i.wordNotEmail = function(n, t, i) { return t.match('/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i') ? i : 0 }; i.wordLength = function(n, t, i) { var r = t.length, u = Math.pow(r, n.rules.raisePower); return r < n.common.minChar && (u += i), u }; i.wordSimilarToUsername = function(t, i, r) { var u = n(t.common.usernameField).val(); return u && i.toLowerCase().match(u.toLowerCase()) ? r : 0 }; i.wordTwoCharacterClasses = function(n, t, i) { return t.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/) || t.match(/([a-zA-Z])/) && t.match(/([0-9])/) || t.match(/(.[!,@,#,$,%,\^,&,*,?,_,~])/) && t.match(/[a-zA-Z0-9_]/) ? i : 0 }; i.wordRepetitions = function(n, t, i) { return t.match(/(.)\1\1/) ? i : 0 }; i.wordSequences = function(i, r, u) { var f, e = !1; return r.length > 2 && (n.each(t.forbiddenSequences, function(t, i) { var u = [i, i.split("").reverse().join("")]; n.each(u, function(n, t) { for (f = 0; f < r.length - 2; f += 1) t.indexOf(r.toLowerCase().substring(f, f + 3)) > -1 && (e = !0) }) }), e) ? u : 0 }; i.wordLowercase = function(n, t, i) { return t.match(/[a-z]/) && i }; i.wordUppercase = function(n, t, i) { return t.match(/[A-Z]/) && i }; i.wordOneNumber = function(n, t, i) { return t.match(/\d+/) && i }; i.wordThreeNumbers = function(n, t, i) { return t.match(/(.*[0-9].*[0-9].*[0-9])/) && i }; i.wordOneSpecialChar = function(n, t, i) { return t.match(/.[!,@,#,$,%,\^,&,*,?,_,~]/) && i }; i.wordTwoSpecialChar = function(n, t, i) { return t.match(/(.*[!,@,#,$,%,\^,&,*,?,_,~].*[!,@,#,$,%,\^,&,*,?,_,~])/) && i }; i.wordUpperLowerCombo = function(n, t, i) { return t.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/) && i }; i.wordLetterNumberCombo = function(n, t, i) { return t.match(/([a-zA-Z])/) && t.match(/([0-9])/) && i }; i.wordLetterNumberCharCombo = function(n, t, i) { return t.match(/([a-zA-Z0-9].*[!,@,#,$,%,\^,&,*,?,_,~])|([!,@,#,$,%,\^,&,*,?,_,~].*[a-zA-Z0-9])/) && i }; t.validation = i; t.executeRules = function(i, r) { var u = 0; return n.each(i.rules.activated, function(f, e) { if (e) { var o, h, c = i.rules.scores[f], s = t.validation[f]; n.isFunction(s) || (s = i.rules.extra[f]); n.isFunction(s) && (o = s(i, r, c), o && (u += o), (0 > o || !n.isNumeric(o) && !o) && (h = i.ui.spanError(i, f), h.length > 0 && i.instances.errors.push(h))) } }), u } }(n, r); try { module && module.exports && (module.exports = r) } catch (e) {} t = {}; t.common = {}; t.common.minChar = 6; t.common.usernameField = "#username"; t.common.userInputs = []; t.common.onLoad = void 0; t.common.onKeyUp = void 0; t.common.zxcvbn = !1; t.common.debug = !1; t.rules = {}; t.rules.extra = {}; t.rules.scores = { wordNotEmail: -100, wordLength: -50, wordSimilarToUsername: -100, wordSequences: -50, wordTwoCharacterClasses: 2, wordRepetitions: -25, wordLowercase: 1, wordUppercase: 3, wordOneNumber: 3, wordThreeNumbers: 5, wordOneSpecialChar: 3, wordTwoSpecialChar: 5, wordUpperLowerCombo: 2, wordLetterNumberCombo: 2, wordLetterNumberCharCombo: 2 }; t.rules.activated = { wordNotEmail: !0, wordLength: !0, wordSimilarToUsername: !0, wordSequences: !0, wordTwoCharacterClasses: !1, wordRepetitions: !1, wordLowercase: !0, wordUppercase: !0, wordOneNumber: !0, wordThreeNumbers: !0, wordOneSpecialChar: !0, wordTwoSpecialChar: !0, wordUpperLowerCombo: !0, wordLetterNumberCombo: !0, wordLetterNumberCharCombo: !0 }; t.rules.raisePower = 1.4; t.ui = {}; t.ui.bootstrap2 = !1; t.ui.showProgressBar = !0; t.ui.showPopover = !1; t.ui.showStatus = !1; t.ui.spanError = function(n, t) { "use strict"; var i = n.ui.errorMessages[t]; return i ? '<span style="color: #d52929">' + i + "<\/span>" : "" }; t.ui.errorMessages = { wordLength: "Your password is too short", wordNotEmail: "Do not use your email as your password", wordSimilarToUsername: "Your password cannot contain your username", wordTwoCharacterClasses: "Use different character classes", wordRepetitions: "Too many repetitions", wordSequences: "Your password contains sequences" }; t.ui.verdicts = ["Weak", "Normal", "Medium", "Strong", "Very Strong"]; t.ui.showVerdicts = !0; t.ui.showVerdictsInsideProgressBar = !1; t.ui.showErrors = !1; t.ui.container = void 0; t.ui.viewports = { progress: void 0, verdict: void 0, errors: void 0 }; t.ui.scores = [14, 26, 38, 50]; i = {}; ! function(n, t) { "use strict"; var r = ["danger", "warning", "success"], i = ["error", "warning", "success"]; t.getContainer = function(t, i) { var r; return r = n(t.ui.container), r && 1 === r.length || (r = i.parent()), r }; t.findElement = function(n, t, i) { return t ? n.find(t).find(i) : n.find(i) }; t.getUIElements = function(n, i) { var u, r; return n.instances.viewports ? n.instances.viewports : (u = t.getContainer(n, i), r = {}, r.$progressbar = t.findElement(u, n.ui.viewports.progress, "div.progress"), n.ui.showVerdictsInsideProgressBar && (r.$verdict = r.$progressbar.find("span.password-verdict")), n.ui.showPopover || (n.ui.showVerdictsInsideProgressBar || (r.$verdict = t.findElement(u, n.ui.viewports.verdict, "span.password-verdict")), r.$errors = t.findElement(u, n.ui.viewports.errors, "ul.error-list")), n.instances.viewports = r, r) }; t.initProgressBar = function(i, r) { var f = t.getContainer(i, r), u = "<div class='progress'><div class='"; i.ui.bootstrap2 || (u += "progress-"); u += "bar'>"; i.ui.showVerdictsInsideProgressBar && (u += "<span class='password-verdict'><\/span>"); u += "<\/div><\/div>"; i.ui.viewports.progress ? f.find(i.ui.viewports.progress).append(u) : n(u).insertAfter(r) }; t.initHelper = function(i, r, u, f) { var e = t.getContainer(i, r); f ? e.find(f).append(u) : n(u).insertAfter(r) }; t.initVerdict = function(n, i) { t.initHelper(n, i, "<span class='password-verdict'><\/span>", n.ui.viewports.verdict) }; t.initErrorList = function(n, i) { t.initHelper(n, i, "<ul class='error-list'><\/ul>", n.ui.viewports.errors) }; t.initPopover = function(n, t) { t.popover("destroy"); t.popover({ html: !0, placement: "bottom", trigger: "manual", content: " " }) }; t.initUI = function(n, i) { n.ui.showPopover ? t.initPopover(n, i) : (n.ui.showErrors && t.initErrorList(n, i), n.ui.showVerdicts && !n.ui.showVerdictsInsideProgressBar && t.initVerdict(n, i)); n.ui.showProgressBar && t.initProgressBar(n, i) }; t.possibleProgressBarClasses = ["danger", "warning", "success"]; t.updateProgressBar = function(i, u, f, e) { var h = t.getUIElements(i, u).$progressbar, o = h.find(".progress-bar"), s = "progress-"; i.ui.bootstrap2 && (o = h.find(".bar"), s = ""); n.each(t.possibleProgressBarClasses, function(n, t) { o.removeClass(s + "bar-" + t) }); o.addClass(s + "bar-" + r[f]); o.css("width", e + "%") }; t.updateVerdict = function(n, i, r) { var u = t.getUIElements(n, i).$verdict; u.text(r) }; t.updateErrors = function(i, r) { var f = t.getUIElements(i, r).$errors, u = ""; n.each(i.instances.errors, function(n, t) { u += "<li>" + t + "<\/li>" }); f.html(u) }; t.updatePopover = function(t, i, r) { var f = i.data("bs.popover"), u = "", e = !0; return t.ui.showVerdicts && !t.ui.showVerdictsInsideProgressBar && r.length > 0 && (u = "<h5><span class='password-verdict'>" + r + "<\/span><\/h5>", e = !1), t.ui.showErrors && (u += "<div>Errors:<ul class='error-list' style='margin-bottom: 0;'>", n.each(t.instances.errors, function(n, t) { u += "<li>" + t + "<\/li>"; e = !1 }), u += "<\/ul><\/div>"), e ? void i.popover("hide") : (t.ui.bootstrap2 && (f = i.data("popover")), void(f.$arrow && f.$arrow.parents("body").length > 0 ? i.find("+ .popover .popover-content").html(u) : (f.options.content = u, i.popover("show")))) }; t.updateFieldStatus = function(t, r, u) { var e = t.ui.bootstrap2 ? ".control-group" : ".form-group", f = r.parents(e).first(); n.each(i, function(n, i) { t.ui.bootstrap2 || (i = "has-" + i); f.removeClass(i) }); u = i[u]; t.ui.bootstrap2 || (u = "has-" + u); f.addClass(u) }; t.percentage = function(n, t) { var i = Math.floor(100 * n / t); return i = 0 > i ? 0 : i, i = i > 100 ? 100 : i }; t.getVerdictAndCssClass = function(n, t) { var i, r, u; return 0 >= t ? (i = 0, u = -1, r = n.ui.verdicts[0]) : t < n.ui.scores[0] ? (i = 0, u = 0, r = n.ui.verdicts[0]) : t < n.ui.scores[1] ? (i = 0, u = 1, r = n.ui.verdicts[1]) : t < n.ui.scores[2] ? (i = 1, u = 2, r = n.ui.verdicts[2]) : t < n.ui.scores[3] ? (i = 1, u = 3, r = n.ui.verdicts[3]) : (i = 2, u = 4, r = n.ui.verdicts[4]), [r, i, u] }; t.updateUI = function(n, i, r) { var u, e, f; u = t.getVerdictAndCssClass(n, r); f = u[0]; u = u[1]; n.ui.showProgressBar && (e = t.percentage(r, n.ui.scores[3]), t.updateProgressBar(n, i, u, e), n.ui.showVerdictsInsideProgressBar && t.updateVerdict(n, i, f)); n.ui.showStatus && t.updateFieldStatus(n, i, u); n.ui.showPopover ? t.updatePopover(n, i, f) : (n.ui.showVerdicts && !n.ui.showVerdictsInsideProgressBar && t.updateVerdict(n, i, f), n.ui.showErrors && t.updateErrors(n, i)) } }(n, i); f = {}; ! function(n, u) { "use strict"; var f, e; f = function(t) { var o, f, h, e, s = n(t.target), u = s.data("pwstrength-bootstrap"), c = s.val(); void 0 !== u && (u.instances.errors = [], u.common.zxcvbn ? (o = [], n.each(u.common.userInputs, function(t, i) { o.push(n(i).val()) }), o.push(n(u.common.usernameField).val()), e = zxcvbn(c, o).entropy) : e = r.executeRules(u, c), i.updateUI(u, s, e), f = i.getVerdictAndCssClass(u, e), h = f[2], f = f[0], u.common.debug && console.log(e + " - " + f), n.isFunction(u.common.onKeyUp) && u.common.onKeyUp(t, { score: e, verdictText: f, verdictLevel: h })) }; u.init = function(r) { return this.each(function(u, e) { var h = n.extend(!0, {}, t), s = n.extend(!0, h, r), o = n(e); s.instances = {}; o.data("pwstrength-bootstrap", s); o.on("keyup", f); o.on("change", f); o.on("onpaste", f); i.initUI(s, o); n.trim(o.val()) && o.trigger("keyup"); n.isFunction(s.common.onLoad) && s.common.onLoad() }), this }; u.destroy = function() { this.each(function(t, r) { var u = n(r), e = u.data("pwstrength-bootstrap"), f = i.getUIElements(e, u); f.$progressbar.remove(); f.$verdict.remove(); f.$errors.remove(); u.removeData("pwstrength-bootstrap") }) }; u.forceUpdate = function() { this.each(function(n, t) { var i = { target: t }; f(i) }) }; u.addRule = function(t, i, r, u) { this.each(function(f, e) { var o = n(e).data("pwstrength-bootstrap"); o.rules.activated[t] = u; o.rules.scores[t] = r; o.rules.extra[t] = i }) }; e = function(t, i, r) { this.each(function(u, f) { n(f).data("pwstrength-bootstrap").rules[i][t] = r }) }; u.changeScore = function(n, t) { e.call(this, n, "scores", t) }; u.ruleActive = function(n, t) { e.call(this, n, "activated", t) }; n.fn.pwstrength = function(t) { var i; return u[t] ? i = u[t].apply(this, Array.prototype.slice.call(arguments, 1)) : "object" != typeof t && t ? n.error("Method " + t + " does not exist on jQuery.pwstrength-bootstrap") : i = u.init.apply(this, arguments), i } }(n, f) }(jQuery)

Related: See More


Questions / Comments: