-
Notifications
You must be signed in to change notification settings - Fork 4
/
jquery.validate.password.js
90 lines (77 loc) · 2.6 KB
/
jquery.validate.password.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
* jQuery validate.password plug-in 1.0
*
* http://bassistance.de/jquery-plugins/jquery-plugin-validate.password/
*
* Depends on validation plugin 1.5+
*
* Copyright (c) 2009 Jörn Zaefferer
*
* $Id$
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
(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 < 8)
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 || lower && digits || upper && digits || special)
return rating(4, "strong");
if (lower && upper || lower && digit || upper && digit)
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"
}
$.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;
}, " ");
// manually add class rule, to make username param optional
$.validator.classRuleSettings.password = { password: true };
})(jQuery);