dqs-jquery-form-validator-rails 2.2.8 → 2.2.163p1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -37
- data/app/assets/javascripts/brazil.dev.js +115 -0
- data/app/assets/javascripts/brazil.js +9 -0
- data/app/assets/javascripts/date.dev.js +81 -0
- data/app/assets/javascripts/date.js +9 -0
- data/app/assets/javascripts/file.dev.js +413 -0
- data/app/assets/javascripts/file.js +9 -0
- data/app/assets/javascripts/html5.dev.js +168 -0
- data/app/assets/javascripts/html5.js +9 -0
- data/app/assets/javascripts/jquery.form-validator.min.js +9 -0
- data/app/assets/javascripts/jsconf.dev.js +55 -0
- data/app/assets/javascripts/jsconf.js +9 -0
- data/app/assets/javascripts/lang/cz.dev.js +65 -0
- data/app/assets/javascripts/lang/cz.js +9 -0
- data/app/assets/javascripts/lang/de.dev.js +65 -0
- data/app/assets/javascripts/lang/de.js +9 -0
- data/app/assets/javascripts/lang/es.dev.js +62 -0
- data/app/assets/javascripts/lang/es.js +9 -0
- data/app/assets/javascripts/lang/fr.dev.js +62 -0
- data/app/assets/javascripts/lang/fr.js +9 -0
- data/app/assets/javascripts/lang/it.dev.js +62 -0
- data/app/assets/javascripts/lang/it.js +9 -0
- data/app/assets/javascripts/lang/pl.dev.js +65 -0
- data/app/assets/javascripts/lang/pl.js +9 -0
- data/app/assets/javascripts/lang/pt.dev.js +65 -0
- data/app/assets/javascripts/lang/pt.js +9 -0
- data/app/assets/javascripts/lang/ro.dev.js +65 -0
- data/app/assets/javascripts/lang/ro.js +9 -0
- data/app/assets/javascripts/lang/ru.dev.js +66 -0
- data/app/assets/javascripts/lang/ru.js +9 -0
- data/app/assets/javascripts/lang/sv.dev.js +63 -0
- data/app/assets/javascripts/lang/sv.js +9 -0
- data/app/assets/javascripts/location.dev.js +78 -0
- data/app/assets/javascripts/location.js +9 -0
- data/app/assets/javascripts/sanitize.dev.js +154 -0
- data/app/assets/javascripts/sanitize.js +9 -0
- data/app/assets/javascripts/security.dev.js +523 -0
- data/app/assets/javascripts/security.js +9 -0
- data/app/assets/javascripts/src/core-validators.js +343 -0
- data/app/assets/javascripts/src/dialogs.js +123 -0
- data/app/assets/javascripts/src/jquery-plugins.js +452 -0
- data/app/assets/javascripts/src/module-loader.js +150 -0
- data/app/assets/javascripts/src/setup.js +168 -0
- data/app/assets/javascripts/src/utils.js +840 -0
- data/app/assets/javascripts/sweden.dev.js +213 -0
- data/app/assets/javascripts/sweden.js +9 -0
- data/{vendor/assets/javascripts/dqs-jquery-form-validator → app/assets/javascripts}/theme-default.css +1 -0
- data/app/assets/javascripts/theme-default.min.css +1 -0
- data/app/assets/javascripts/toggleDisabled.dev.js +67 -0
- data/app/assets/javascripts/toggleDisabled.js +9 -0
- data/app/assets/javascripts/uk.dev.js +85 -0
- data/app/assets/javascripts/uk.js +9 -0
- data/lib/dqs/jquery/form/validator/rails/version.rb +1 -1
- metadata +56 -37
- data/vendor/assets/javascripts/dqs-jquery-form-validator/brazil.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/date.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/file.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/html5.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/jquery.form-validator.js +0 -2108
- data/vendor/assets/javascripts/dqs-jquery-form-validator/jquery.form-validator.min.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/jsconf.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ca.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/cz.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/de.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/dk.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/es.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/fr.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/it.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/nl.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/no.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/pl.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/pt.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ro.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/ru.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/lang/sv.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/location.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/logic.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/poland.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/sanitize.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/security.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/sepa.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/sweden.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/theme-default.min.css +0 -1
- data/vendor/assets/javascripts/dqs-jquery-form-validator/toggleDisabled.js +0 -9
- data/vendor/assets/javascripts/dqs-jquery-form-validator/uk.js +0 -9
@@ -0,0 +1,523 @@
|
|
1
|
+
/**
|
2
|
+
* jQuery Form Validator Module: Security
|
3
|
+
* ------------------------------------------
|
4
|
+
* Created by Victor Jonsson <http://victorjonsson.se>
|
5
|
+
*
|
6
|
+
* This module adds validators typically used in registration forms.
|
7
|
+
* This module adds the following validators:
|
8
|
+
* - spamcheck
|
9
|
+
* - confirmation
|
10
|
+
* - strength
|
11
|
+
* - backend
|
12
|
+
* - credit card
|
13
|
+
* - cvv
|
14
|
+
*
|
15
|
+
* @website http://formvalidator.net/#security-validators
|
16
|
+
* @license MIT
|
17
|
+
* @version 2.2.163
|
18
|
+
*/
|
19
|
+
(function($, window) {
|
20
|
+
|
21
|
+
'use strict';
|
22
|
+
|
23
|
+
/*
|
24
|
+
* Simple spam check
|
25
|
+
*/
|
26
|
+
$.formUtils.addValidator({
|
27
|
+
name : 'spamcheck',
|
28
|
+
validatorFunction : function(val, $el) {
|
29
|
+
var attr = $el.valAttr('captcha');
|
30
|
+
return attr === val;
|
31
|
+
},
|
32
|
+
errorMessage : '',
|
33
|
+
errorMessageKey: 'badSecurityAnswer'
|
34
|
+
});
|
35
|
+
|
36
|
+
|
37
|
+
/*
|
38
|
+
* Validate confirmation
|
39
|
+
*/
|
40
|
+
$.formUtils.addValidator({
|
41
|
+
name : 'confirmation',
|
42
|
+
validatorFunction : function(value, $el, config, language, $form) {
|
43
|
+
var conf = '',
|
44
|
+
confInputName = $el.valAttr('confirm') || ($el.attr('name') + '_confirmation'),
|
45
|
+
$confInput = $form.find('[name="' +confInputName+ '"]').eq(0);
|
46
|
+
|
47
|
+
if ( $confInput ) {
|
48
|
+
conf = $confInput.val();
|
49
|
+
if( config.validateOnBlur && !$confInput[0].hasValidationCallback ) {
|
50
|
+
$confInput[0].hasValidationCallback = true;
|
51
|
+
var keyUpCallback = function() {
|
52
|
+
$el.validate();
|
53
|
+
};
|
54
|
+
$confInput.on('keyup', keyUpCallback);
|
55
|
+
$form.one('formValidationSetup', function() {
|
56
|
+
$confInput[0].hasValidationCallback = false;
|
57
|
+
$confInput.off('keyup', keyUpCallback);
|
58
|
+
});
|
59
|
+
}
|
60
|
+
} else {
|
61
|
+
alert('Could not find an input with name "'+confInputName+'"');
|
62
|
+
}
|
63
|
+
|
64
|
+
return value === conf;
|
65
|
+
},
|
66
|
+
errorMessage : '',
|
67
|
+
errorMessageKey: 'notConfirmed'
|
68
|
+
});
|
69
|
+
|
70
|
+
var creditCards = {
|
71
|
+
'amex' : [15,15],
|
72
|
+
'diners_club' : [14,14],
|
73
|
+
'cjb' : [16,16],
|
74
|
+
'laser' : [16,19],
|
75
|
+
'visa' : [16,16],
|
76
|
+
'mastercard' : [16,16],
|
77
|
+
'maestro' : [12,19],
|
78
|
+
'discover' : [16,16]
|
79
|
+
},
|
80
|
+
checkOnlyAmex = false,
|
81
|
+
allowsAmex = false;
|
82
|
+
|
83
|
+
/*
|
84
|
+
* Credit card
|
85
|
+
*/
|
86
|
+
$.formUtils.addValidator({
|
87
|
+
name : 'creditcard',
|
88
|
+
validatorFunction : function(value, $el) {
|
89
|
+
var allowing = $.split( $el.valAttr('allowing') || '' );
|
90
|
+
|
91
|
+
// Setup for cvv validation
|
92
|
+
allowsAmex = $.inArray('amex', allowing) > -1;
|
93
|
+
checkOnlyAmex = allowsAmex && allowing.length === 1;
|
94
|
+
|
95
|
+
// Correct length
|
96
|
+
if( allowing.length > 0 ) {
|
97
|
+
var hasValidLength = false;
|
98
|
+
$.each(allowing, function(i, cardName) {
|
99
|
+
if( cardName in creditCards) {
|
100
|
+
if( value.length >= creditCards[cardName][0] && value.length <= creditCards[cardName][1]) {
|
101
|
+
hasValidLength = true;
|
102
|
+
return false;
|
103
|
+
}
|
104
|
+
} else if( window.console ) {
|
105
|
+
console.warn('Use of unknown credit card "'+cardName+'"');
|
106
|
+
}
|
107
|
+
});
|
108
|
+
|
109
|
+
if ( !hasValidLength ) {
|
110
|
+
return false;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
// only numbers
|
115
|
+
if ( value.replace(new RegExp('[0-9]', 'g'), '') !== '' ) {
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
|
119
|
+
// http://en.wikipedia.org/wiki/Luhn_algorithm
|
120
|
+
// http://www.brainjar.com/js/validation/default2.asp
|
121
|
+
var checkSum = 0;
|
122
|
+
$.each(value.split('').reverse(), function(i, digit) {
|
123
|
+
digit = parseInt(digit, 10);
|
124
|
+
if( i%2 === 0 ) {
|
125
|
+
checkSum += digit;
|
126
|
+
} else {
|
127
|
+
digit *= 2;
|
128
|
+
if (digit < 10) {
|
129
|
+
checkSum += digit;
|
130
|
+
} else {
|
131
|
+
checkSum += digit - 9;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
});
|
135
|
+
return checkSum % 10 === 0;
|
136
|
+
},
|
137
|
+
errorMessage : '',
|
138
|
+
errorMessageKey: 'badCreditCard'
|
139
|
+
});
|
140
|
+
|
141
|
+
|
142
|
+
/*
|
143
|
+
* Credit card number
|
144
|
+
*/
|
145
|
+
$.formUtils.addValidator({
|
146
|
+
name : 'cvv',
|
147
|
+
validatorFunction : function(val) {
|
148
|
+
if( val.replace(/[0-9]/g, '') === '' ) {
|
149
|
+
val = val + '';
|
150
|
+
if( checkOnlyAmex ) {
|
151
|
+
return val.length === 4;
|
152
|
+
} else if( allowsAmex ) {
|
153
|
+
return val.length === 3 || val.length === 4;
|
154
|
+
} else {
|
155
|
+
return val.length === 3;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
return false;
|
159
|
+
},
|
160
|
+
errorMessage : '',
|
161
|
+
errorMessageKey: 'badCVV'
|
162
|
+
});
|
163
|
+
|
164
|
+
/*
|
165
|
+
* Validate password strength
|
166
|
+
*/
|
167
|
+
$.formUtils.addValidator({
|
168
|
+
name : 'strength',
|
169
|
+
validatorFunction : function(val, $el) {
|
170
|
+
var requiredStrength = $el.valAttr('strength') || 2;
|
171
|
+
if (requiredStrength && requiredStrength > 3) {
|
172
|
+
requiredStrength = 3;
|
173
|
+
}
|
174
|
+
|
175
|
+
return $.formUtils.validators.validate_strength.calculatePasswordStrength(val) >= requiredStrength;
|
176
|
+
},
|
177
|
+
errorMessage : '',
|
178
|
+
errorMessageKey: 'badStrength',
|
179
|
+
|
180
|
+
/**
|
181
|
+
* Code more or less borrowed from jQuery plugin "Password Strength Meter"
|
182
|
+
* written by Darren Mason (djmason9@gmail.com), myPocket technologies (www.mypocket-technologies.com)
|
183
|
+
* @param {String} password
|
184
|
+
* @return {Number}
|
185
|
+
*/
|
186
|
+
calculatePasswordStrength : function(password) {
|
187
|
+
|
188
|
+
if (password.length < 4) {
|
189
|
+
return 0;
|
190
|
+
}
|
191
|
+
|
192
|
+
var score = 0;
|
193
|
+
|
194
|
+
var checkRepetition = function (pLen, str) {
|
195
|
+
var res = '';
|
196
|
+
for (var i = 0; i < str.length; i++) {
|
197
|
+
var repeated = true;
|
198
|
+
|
199
|
+
for (var j = 0; j < pLen && (j + i + pLen) < str.length; j++) {
|
200
|
+
repeated = repeated && (str.charAt(j + i) === str.charAt(j + i + pLen));
|
201
|
+
}
|
202
|
+
if (j < pLen) {
|
203
|
+
repeated = false;
|
204
|
+
}
|
205
|
+
if (repeated) {
|
206
|
+
i += pLen - 1;
|
207
|
+
repeated = false;
|
208
|
+
}
|
209
|
+
else {
|
210
|
+
res += str.charAt(i);
|
211
|
+
}
|
212
|
+
}
|
213
|
+
return res;
|
214
|
+
};
|
215
|
+
|
216
|
+
//password length
|
217
|
+
score += password.length * 4;
|
218
|
+
score += ( checkRepetition(1, password).length - password.length ) * 1;
|
219
|
+
score += ( checkRepetition(2, password).length - password.length ) * 1;
|
220
|
+
score += ( checkRepetition(3, password).length - password.length ) * 1;
|
221
|
+
score += ( checkRepetition(4, password).length - password.length ) * 1;
|
222
|
+
|
223
|
+
//password has 3 numbers
|
224
|
+
if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {
|
225
|
+
score += 5;
|
226
|
+
}
|
227
|
+
|
228
|
+
//password has 2 symbols
|
229
|
+
if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) {
|
230
|
+
score += 5;
|
231
|
+
}
|
232
|
+
|
233
|
+
//password has Upper and Lower chars
|
234
|
+
if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
|
235
|
+
score += 10;
|
236
|
+
}
|
237
|
+
|
238
|
+
//password has number and chars
|
239
|
+
if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {
|
240
|
+
score += 15;
|
241
|
+
}
|
242
|
+
//
|
243
|
+
//password has number and symbol
|
244
|
+
if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) {
|
245
|
+
score += 15;
|
246
|
+
}
|
247
|
+
|
248
|
+
//password has char and symbol
|
249
|
+
if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) {
|
250
|
+
score += 15;
|
251
|
+
}
|
252
|
+
|
253
|
+
//password is just a numbers or chars
|
254
|
+
if (password.match(/^\w+$/) || password.match(/^\d+$/)) {
|
255
|
+
score -= 10;
|
256
|
+
}
|
257
|
+
|
258
|
+
//verifying 0 < score < 100
|
259
|
+
if (score < 0) {
|
260
|
+
score = 0;
|
261
|
+
}
|
262
|
+
if (score > 100) {
|
263
|
+
score = 100;
|
264
|
+
}
|
265
|
+
|
266
|
+
if (score < 20) {
|
267
|
+
return 0;
|
268
|
+
}
|
269
|
+
else if (score < 40) {
|
270
|
+
return 1;
|
271
|
+
}
|
272
|
+
else if(score <= 60) {
|
273
|
+
return 2;
|
274
|
+
}
|
275
|
+
else {
|
276
|
+
return 3;
|
277
|
+
}
|
278
|
+
},
|
279
|
+
|
280
|
+
strengthDisplay : function($el, options) {
|
281
|
+
var config = {
|
282
|
+
fontSize: '12pt',
|
283
|
+
padding: '4px',
|
284
|
+
bad : 'Very bad',
|
285
|
+
weak : 'Weak',
|
286
|
+
good : 'Good',
|
287
|
+
strong : 'Strong'
|
288
|
+
};
|
289
|
+
|
290
|
+
if (options) {
|
291
|
+
$.extend(config, options);
|
292
|
+
}
|
293
|
+
|
294
|
+
$el.bind('keyup', function() {
|
295
|
+
var val = $(this).val(),
|
296
|
+
$parent = typeof config.parent === 'undefined' ? $(this).parent() : $(config.parent),
|
297
|
+
$displayContainer = $parent.find('.strength-meter'),
|
298
|
+
strength = $.formUtils.validators.validate_strength.calculatePasswordStrength(val),
|
299
|
+
css = {
|
300
|
+
background: 'pink',
|
301
|
+
color : '#FF0000',
|
302
|
+
fontWeight : 'bold',
|
303
|
+
border : 'red solid 1px',
|
304
|
+
borderWidth : '0px 0px 4px',
|
305
|
+
display : 'inline-block',
|
306
|
+
fontSize : config.fontSize,
|
307
|
+
padding : config.padding
|
308
|
+
},
|
309
|
+
text = config.bad;
|
310
|
+
|
311
|
+
if($displayContainer.length === 0) {
|
312
|
+
$displayContainer = $('<span></span>');
|
313
|
+
$displayContainer
|
314
|
+
.addClass('strength-meter')
|
315
|
+
.appendTo($parent);
|
316
|
+
}
|
317
|
+
|
318
|
+
if( !val ) {
|
319
|
+
$displayContainer.hide();
|
320
|
+
} else {
|
321
|
+
$displayContainer.show();
|
322
|
+
}
|
323
|
+
|
324
|
+
if(strength === 1) {
|
325
|
+
text = config.weak;
|
326
|
+
}
|
327
|
+
else if(strength === 2) {
|
328
|
+
css.background = 'lightyellow';
|
329
|
+
css.borderColor = 'yellow';
|
330
|
+
css.color = 'goldenrod';
|
331
|
+
text = config.good;
|
332
|
+
}
|
333
|
+
else if(strength >= 3) {
|
334
|
+
css.background = 'lightgreen';
|
335
|
+
css.borderColor = 'darkgreen';
|
336
|
+
css.color = 'darkgreen';
|
337
|
+
text = config.strong;
|
338
|
+
}
|
339
|
+
|
340
|
+
$displayContainer
|
341
|
+
.css(css)
|
342
|
+
.text(text);
|
343
|
+
});
|
344
|
+
}
|
345
|
+
});
|
346
|
+
|
347
|
+
var requestServer = function(serverURL, $element, val, conf, callback) {
|
348
|
+
var reqParams = $element.valAttr('req-params') || $element.data('validation-req-params') || {},
|
349
|
+
handleResponse = function(response, callback) {
|
350
|
+
if(response.valid) {
|
351
|
+
$element.valAttr('backend-valid', 'true');
|
352
|
+
}
|
353
|
+
else {
|
354
|
+
$element.valAttr('backend-invalid', 'true');
|
355
|
+
if (response.message) {
|
356
|
+
$element.attr(conf.validationErrorMsgAttribute, response.message);
|
357
|
+
}
|
358
|
+
}
|
359
|
+
|
360
|
+
if( !$element.valAttr('has-keyup-event') ) {
|
361
|
+
$element
|
362
|
+
.valAttr('has-keyup-event', '1')
|
363
|
+
.bind('keyup change', function(evt) {
|
364
|
+
if( evt.keyCode !== 9 && evt.keyCode !== 16 ) {
|
365
|
+
$(this)
|
366
|
+
.valAttr('backend-valid', false)
|
367
|
+
.valAttr('backend-invalid', false);
|
368
|
+
}
|
369
|
+
});
|
370
|
+
}
|
371
|
+
|
372
|
+
callback();
|
373
|
+
};
|
374
|
+
|
375
|
+
if ( !reqParams ) {
|
376
|
+
reqParams = {};
|
377
|
+
}
|
378
|
+
if ( typeof reqParams === 'string' ) {
|
379
|
+
reqParams = $.parseJSON(reqParams);
|
380
|
+
}
|
381
|
+
reqParams[$element.valAttr('param-name') || $element.attr('name')] = val;
|
382
|
+
|
383
|
+
$.ajax({
|
384
|
+
url : serverURL,
|
385
|
+
type : 'POST',
|
386
|
+
cache : false,
|
387
|
+
data : reqParams,
|
388
|
+
dataType : 'json',
|
389
|
+
error : function(error) {
|
390
|
+
handleResponse({valid: false, message:'Connection failed with status: ' + error.statusText}, callback);
|
391
|
+
return false;
|
392
|
+
},
|
393
|
+
success : function(response) {
|
394
|
+
handleResponse(response, callback);
|
395
|
+
}
|
396
|
+
});
|
397
|
+
},
|
398
|
+
disableFormSubmit = function() {
|
399
|
+
return false;
|
400
|
+
};
|
401
|
+
|
402
|
+
/*
|
403
|
+
* Server validation
|
404
|
+
* Flow (form submission):
|
405
|
+
* 1) Check if the value already has been validated on the server. If so, display the validation
|
406
|
+
* result and continue the validation process, otherwise continue to step 2
|
407
|
+
* 2) Return false as if the value is invalid and set $.formUtils.haltValidation to true
|
408
|
+
* 3) Disable form submission on the form being validated
|
409
|
+
* 4) Request the server with value and input name and add class 'validating-server-side' to the form
|
410
|
+
* 5) When the server responds an attribute will be added to the element
|
411
|
+
* telling the validator that the input has a valid/invalid value and enable form submission
|
412
|
+
* 6) Run form submission again (back to step 1)
|
413
|
+
*/
|
414
|
+
$.formUtils.addValidator({
|
415
|
+
name : 'server',
|
416
|
+
validatorFunction : function(val, $el, conf, lang, $form) {
|
417
|
+
|
418
|
+
var backendValid = $el.valAttr('backend-valid'),
|
419
|
+
backendInvalid = $el.valAttr('backend-invalid'),
|
420
|
+
serverURL = document.location.href;
|
421
|
+
|
422
|
+
if($el.valAttr('url')) {
|
423
|
+
serverURL = $el.valAttr('url');
|
424
|
+
} else if('serverURL' in conf) {
|
425
|
+
serverURL = conf.backendUrl;
|
426
|
+
}
|
427
|
+
|
428
|
+
if (backendValid) {
|
429
|
+
return true;
|
430
|
+
}
|
431
|
+
else if (backendInvalid) {
|
432
|
+
return false;
|
433
|
+
}
|
434
|
+
else if($.formUtils.eventType === 'keyup' && !$.formUtils.isValidatingEntireForm) {
|
435
|
+
return null;
|
436
|
+
}
|
437
|
+
|
438
|
+
if ($.formUtils.isValidatingEntireForm) {
|
439
|
+
$form
|
440
|
+
.bind('submit', disableFormSubmit)
|
441
|
+
.addClass('validating-server-side')
|
442
|
+
.addClass('on-blur');
|
443
|
+
|
444
|
+
$el.addClass('validating-server-side');
|
445
|
+
$.formUtils.haltValidation = true;
|
446
|
+
|
447
|
+
requestServer(serverURL, $el, val, conf, function() {
|
448
|
+
|
449
|
+
$form
|
450
|
+
.removeClass('validating-server-side')
|
451
|
+
.removeClass('on-blur')
|
452
|
+
.get(0).onsubmit = function() {};
|
453
|
+
|
454
|
+
$form.unbind('submit', disableFormSubmit);
|
455
|
+
$el.removeClass('validating-server-side');
|
456
|
+
|
457
|
+
$el.valAttr('value-length', val.length);
|
458
|
+
|
459
|
+
// fire submission again!
|
460
|
+
$.formUtils.haltValidation = false;
|
461
|
+
$form.trigger('submit');
|
462
|
+
});
|
463
|
+
|
464
|
+
return null;
|
465
|
+
|
466
|
+
} else {
|
467
|
+
// validation on blur
|
468
|
+
$form.addClass('validating-server-side');
|
469
|
+
$el.addClass('validating-server-side');
|
470
|
+
requestServer(serverURL, $el, val, conf, function() {
|
471
|
+
$form.removeClass('validating-server-side');
|
472
|
+
$el.removeClass('validating-server-side');
|
473
|
+
$el.trigger('blur');
|
474
|
+
});
|
475
|
+
return null;
|
476
|
+
}
|
477
|
+
},
|
478
|
+
errorMessage : '',
|
479
|
+
errorMessageKey: 'badBackend',
|
480
|
+
validateOnKeyUp : false
|
481
|
+
});
|
482
|
+
|
483
|
+
|
484
|
+
/*
|
485
|
+
* Check for only letters and numbers
|
486
|
+
*
|
487
|
+
* http://www.slovo.info/testuni.htm
|
488
|
+
*/
|
489
|
+
$.formUtils.addValidator({
|
490
|
+
name : 'letternumeric',
|
491
|
+
validatorFunction : function(val, $el, config, language) {
|
492
|
+
var patternStart = '^([a-zA-Z0-9\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
|
493
|
+
patternEnd = ']+)$',
|
494
|
+
additionalChars = $el.valAttr('allowing'),
|
495
|
+
pattern = '';
|
496
|
+
|
497
|
+
if (additionalChars) {
|
498
|
+
pattern = patternStart + additionalChars + patternEnd;
|
499
|
+
var extra = additionalChars.replace(/\\/g, '');
|
500
|
+
if (extra.indexOf(' ') > -1) {
|
501
|
+
extra = extra.replace(' ', '');
|
502
|
+
extra += language.andSpaces || $.formUtils.LANG.andSpaces;
|
503
|
+
}
|
504
|
+
this.errorMessage = language.badAlphaNumeric + language.badAlphaNumericExtra + extra;
|
505
|
+
} else {
|
506
|
+
pattern = patternStart + patternEnd;
|
507
|
+
this.errorMessage = language.badAlphaNumeric;
|
508
|
+
}
|
509
|
+
|
510
|
+
return new RegExp(pattern).test(val);
|
511
|
+
},
|
512
|
+
errorMessage : '',
|
513
|
+
errorMessageKey: 'requiredFields'
|
514
|
+
});
|
515
|
+
|
516
|
+
|
517
|
+
|
518
|
+
$.fn.displayPasswordStrength = function(conf) {
|
519
|
+
new $.formUtils.validators.validate_strength.strengthDisplay(this, conf);
|
520
|
+
return this;
|
521
|
+
};
|
522
|
+
|
523
|
+
})(jQuery, window);
|
@@ -0,0 +1,9 @@
|
|
1
|
+
/**
|
2
|
+
* JQUERY-FORM-VALIDATOR
|
3
|
+
*
|
4
|
+
* @version 2.2.163
|
5
|
+
* @website http://formvalidator.net/
|
6
|
+
* @author Victor Jonsson, http://victorjonsson.se
|
7
|
+
* @license MIT
|
8
|
+
*/
|
9
|
+
!function(a,b){"use strict";a.formUtils.addValidator({name:"spamcheck",validatorFunction:function(a,b){var c=b.valAttr("captcha");return c===a},errorMessage:"",errorMessageKey:"badSecurityAnswer"}),a.formUtils.addValidator({name:"confirmation",validatorFunction:function(a,b,c,d,e){var f="",g=b.valAttr("confirm")||b.attr("name")+"_confirmation",h=e.find('[name="'+g+'"]').eq(0);if(h){if(f=h.val(),c.validateOnBlur&&!h[0].hasValidationCallback){h[0].hasValidationCallback=!0;var i=function(){b.validate()};h.on("keyup",i),e.one("formValidationSetup",function(){h[0].hasValidationCallback=!1,h.off("keyup",i)})}}else alert('Could not find an input with name "'+g+'"');return a===f},errorMessage:"",errorMessageKey:"notConfirmed"});var c={amex:[15,15],diners_club:[14,14],cjb:[16,16],laser:[16,19],visa:[16,16],mastercard:[16,16],maestro:[12,19],discover:[16,16]},d=!1,e=!1;a.formUtils.addValidator({name:"creditcard",validatorFunction:function(f,g){var h=a.split(g.valAttr("allowing")||"");if(e=a.inArray("amex",h)>-1,d=e&&1===h.length,h.length>0){var i=!1;if(a.each(h,function(a,d){if(d in c){if(f.length>=c[d][0]&&f.length<=c[d][1])return i=!0,!1}else b.console&&console.warn('Use of unknown credit card "'+d+'"')}),!i)return!1}if(""!==f.replace(new RegExp("[0-9]","g"),""))return!1;var j=0;return a.each(f.split("").reverse(),function(a,b){b=parseInt(b,10),a%2===0?j+=b:(b*=2,j+=10>b?b:b-9)}),j%10===0},errorMessage:"",errorMessageKey:"badCreditCard"}),a.formUtils.addValidator({name:"cvv",validatorFunction:function(a){return""===a.replace(/[0-9]/g,"")?(a+="",d?4===a.length:e?3===a.length||4===a.length:3===a.length):!1},errorMessage:"",errorMessageKey:"badCVV"}),a.formUtils.addValidator({name:"strength",validatorFunction:function(b,c){var d=c.valAttr("strength")||2;return d&&d>3&&(d=3),a.formUtils.validators.validate_strength.calculatePasswordStrength(b)>=d},errorMessage:"",errorMessageKey:"badStrength",calculatePasswordStrength:function(a){if(a.length<4)return 0;var b=0,c=function(a,b){for(var c="",d=0;d<b.length;d++){for(var e=!0,f=0;a>f&&f+d+a<b.length;f++)e=e&&b.charAt(f+d)===b.charAt(f+d+a);a>f&&(e=!1),e?(d+=a-1,e=!1):c+=b.charAt(d)}return c};return b+=4*a.length,b+=1*(c(1,a).length-a.length),b+=1*(c(2,a).length-a.length),b+=1*(c(3,a).length-a.length),b+=1*(c(4,a).length-a.length),a.match(/(.*[0-9].*[0-9].*[0-9])/)&&(b+=5),a.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)&&(b+=5),a.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)&&(b+=10),a.match(/([a-zA-Z])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([a-zA-Z])/)&&(b+=15),(a.match(/^\w+$/)||a.match(/^\d+$/))&&(b-=10),0>b&&(b=0),b>100&&(b=100),20>b?0:40>b?1:60>=b?2:3},strengthDisplay:function(b,c){var d={fontSize:"12pt",padding:"4px",bad:"Very bad",weak:"Weak",good:"Good",strong:"Strong"};c&&a.extend(d,c),b.bind("keyup",function(){var b=a(this).val(),c="undefined"==typeof d.parent?a(this).parent():a(d.parent),e=c.find(".strength-meter"),f=a.formUtils.validators.validate_strength.calculatePasswordStrength(b),g={background:"pink",color:"#FF0000",fontWeight:"bold",border:"red solid 1px",borderWidth:"0px 0px 4px",display:"inline-block",fontSize:d.fontSize,padding:d.padding},h=d.bad;0===e.length&&(e=a("<span></span>"),e.addClass("strength-meter").appendTo(c)),b?e.show():e.hide(),1===f?h=d.weak:2===f?(g.background="lightyellow",g.borderColor="yellow",g.color="goldenrod",h=d.good):f>=3&&(g.background="lightgreen",g.borderColor="darkgreen",g.color="darkgreen",h=d.strong),e.css(g).text(h)})}});var f=function(b,c,d,e,f){var g=c.valAttr("req-params")||c.data("validation-req-params")||{},h=function(b,d){b.valid?c.valAttr("backend-valid","true"):(c.valAttr("backend-invalid","true"),b.message&&c.attr(e.validationErrorMsgAttribute,b.message)),c.valAttr("has-keyup-event")||c.valAttr("has-keyup-event","1").bind("keyup change",function(b){9!==b.keyCode&&16!==b.keyCode&&a(this).valAttr("backend-valid",!1).valAttr("backend-invalid",!1)}),d()};g||(g={}),"string"==typeof g&&(g=a.parseJSON(g)),g[c.valAttr("param-name")||c.attr("name")]=d,a.ajax({url:b,type:"POST",cache:!1,data:g,dataType:"json",error:function(a){return h({valid:!1,message:"Connection failed with status: "+a.statusText},f),!1},success:function(a){h(a,f)}})},g=function(){return!1};a.formUtils.addValidator({name:"server",validatorFunction:function(b,c,d,e,h){var i=c.valAttr("backend-valid"),j=c.valAttr("backend-invalid"),k=document.location.href;return c.valAttr("url")?k=c.valAttr("url"):"serverURL"in d&&(k=d.backendUrl),i?!0:j?!1:"keyup"!==a.formUtils.eventType||a.formUtils.isValidatingEntireForm?a.formUtils.isValidatingEntireForm?(h.bind("submit",g).addClass("validating-server-side").addClass("on-blur"),c.addClass("validating-server-side"),a.formUtils.haltValidation=!0,f(k,c,b,d,function(){h.removeClass("validating-server-side").removeClass("on-blur").get(0).onsubmit=function(){},h.unbind("submit",g),c.removeClass("validating-server-side"),c.valAttr("value-length",b.length),a.formUtils.haltValidation=!1,h.trigger("submit")}),null):(h.addClass("validating-server-side"),c.addClass("validating-server-side"),f(k,c,b,d,function(){h.removeClass("validating-server-side"),c.removeClass("validating-server-side"),c.trigger("blur")}),null):null},errorMessage:"",errorMessageKey:"badBackend",validateOnKeyUp:!1}),a.formUtils.addValidator({name:"letternumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:"requiredFields"}),a.fn.displayPasswordStrength=function(b){return new a.formUtils.validators.validate_strength.strengthDisplay(this,b),this}}(jQuery,window);
|