Skip to content

Commit 370ef61

Browse files
committed
Merge branch 'master' of github.com:victorjonsson/jQuery-Form-Validator
2 parents 1ac878d + bb08d8b commit 370ef61

File tree

4 files changed

+141
-3
lines changed

4 files changed

+141
-3
lines changed

src/lang/es.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,14 @@
5353
imageTooSmall: 'la imagen es demasiado pequeña',
5454
min: 'min.',
5555
max: 'máx.',
56-
imageRatioNotAccepted : 'La proporción de imagen (alto x ancho) no es válida'
56+
imageRatioNotAccepted : 'La proporción de imagen (alto x ancho) no es válida',
57+
passwordComplexityStart: 'La contraseña debe contener al menos ',
58+
passwordComplexitySeparator: ', ',
59+
passwordComplexityUppercaseInfo: ' mayúscula(s)',
60+
passwordComplexityLowercaseInfo: ' minúscula(s)',
61+
passwordComplexitySpecialCharsInfo: ' caracter(es) especial(es)',
62+
passwordComplexityNumericCharsInfo: ' número(s)',
63+
passwordComplexityEnd: '.'
5764
};
5865

5966
});

src/main/utils.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,14 @@
686686
badPlPesel: 'The PESEL entered is invalid',
687687
badPlNip: 'The NIP entered is invalid',
688688
badPlRegon: 'The REGON entered is invalid',
689-
badreCaptcha: 'Please confirm that you are not a bot'
689+
badreCaptcha: 'Please confirm that you are not a bot',
690+
passwordComplexityStart: 'Password must contain at least ',
691+
passwordComplexitySeparator: ', ',
692+
passwordComplexityUppercaseInfo: ' uppercase letter(s)',
693+
passwordComplexityLowercaseInfo: ' lowercase letter(s)',
694+
passwordComplexitySpecialCharsInfo: ' special character(s)',
695+
passwordComplexityNumericCharsInfo: ' numeric character(s)',
696+
passwordComplexityEnd: '.'
690697
}
691698
});
692699

src/modules/security.js

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,85 @@
432432
errorMessageKey: 'requiredFields'
433433
});
434434

435+
/*
436+
* Check password content depending on following parameters:
437+
* data-validation-require-uc-letter,
438+
* data-validation-require-lc-letter,
439+
* data-validation-require-special-char,
440+
* data-validation-require-numeral
441+
*
442+
*/
443+
$.formUtils.addValidator({
444+
name : 'complexity',
445+
validatorFunction : function(val, $el) {
446+
var numRequiredUppercaseChars = $el.valAttr('require-uc-letter') || '0',
447+
numRequiredLowercaseChars = $el.valAttr('require-lc-letter') || '0',
448+
numRequiredSpecialChars = $el.valAttr('require-special-char') || '0',
449+
numRequiredNumericChars = $el.valAttr('require-numeral') || '0',
450+
patternUpperCaseChars = '^(?=(?:.*[A-Z]){'+numRequiredUppercaseChars+',}).+',
451+
patternLowerCaseChars = '^(?=(?:.*[a-z]){'+numRequiredLowercaseChars+',}).+',
452+
patternSpecialChars = '^(?=(?:.*(_|[!"#$%&\'()*+\\\\,-./:;<=>?@[\\]^_`{|}~])){'+numRequiredSpecialChars+',}).+',
453+
patternNumericChars = '^(?=(?:.*\\d){'+numRequiredNumericChars+',}).+',
454+
resultRegExpRequiredUppercaseChars = true,
455+
resultRegExpRequiredLowercaseChars = true,
456+
resultRegExpRequiredSpecialChars = true,
457+
resultRegExpRequiredNumericChars = true,
458+
error = false,
459+
message_error = '';
460+
461+
if (numRequiredUppercaseChars !== '0'){
462+
resultRegExpRequiredUppercaseChars = new RegExp(patternUpperCaseChars).test(val);
463+
}
464+
if (numRequiredLowercaseChars !== '0'){
465+
resultRegExpRequiredLowercaseChars = new RegExp(patternLowerCaseChars).test(val);
466+
}
467+
if (numRequiredSpecialChars !== '0'){
468+
resultRegExpRequiredSpecialChars = new RegExp(patternSpecialChars).test(val);
469+
}
470+
if (numRequiredNumericChars !== '0'){
471+
resultRegExpRequiredNumericChars = new RegExp(patternNumericChars).test(val);
472+
}
473+
474+
if (!resultRegExpRequiredUppercaseChars){
475+
error = true;
476+
message_error = $.formUtils.LANG.passwordComplexityStart + numRequiredUppercaseChars + $.formUtils.LANG.passwordComplexityUppercaseInfo;
477+
}
478+
if (!resultRegExpRequiredLowercaseChars){
479+
if (error){
480+
message_error = message_error + $.formUtils.LANG.passwordComplexitySeparator + numRequiredLowercaseChars + $.formUtils.LANG.passwordComplexityLowercaseInfo;
481+
}
482+
else{
483+
error = true;
484+
message_error = $.formUtils.LANG.passwordComplexityStart + numRequiredLowercaseChars + $.formUtils.LANG.passwordComplexityLowercaseInfo;
485+
}
486+
}
487+
if (!resultRegExpRequiredSpecialChars){
488+
if (error){
489+
message_error = message_error + $.formUtils.LANG.passwordComplexitySeparator + numRequiredSpecialChars + $.formUtils.LANG.passwordComplexitySpecialCharsInfo;
490+
}
491+
else{
492+
error = true;
493+
message_error = $.formUtils.LANG.passwordComplexityStart + numRequiredSpecialChars + $.formUtils.LANG.passwordComplexitySpecialCharsInfo;
494+
}
495+
}
496+
if (!resultRegExpRequiredNumericChars){
497+
if (error){
498+
message_error = message_error + $.formUtils.LANG.passwordComplexitySeparator + numRequiredNumericChars + $.formUtils.LANG.passwordComplexityNumericCharsInfo;
499+
}
500+
else{
501+
message_error = $.formUtils.LANG.passwordComplexityStart + numRequiredNumericChars + $.formUtils.LANG.passwordComplexityNumericCharsInfo;
502+
}
503+
}
504+
505+
this.errorMessage = message_error + $.formUtils.LANG.passwordComplexityEnd;
506+
if(resultRegExpRequiredUppercaseChars && resultRegExpRequiredLowercaseChars && resultRegExpRequiredSpecialChars && resultRegExpRequiredNumericChars){
507+
return true;
508+
}
509+
return false;
510+
},
511+
errorMessage : '',
512+
errorMessageKey: ''
513+
});
435514
/*
436515
* Google reCaptcha 2
437516
*/

test/qunit.html

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1062,8 +1062,53 @@
10621062
});
10631063

10641064
});
1065-
// TODO: Write more tests...
1065+
1066+
/*
1067+
* COMPLEXITY VALIDATION
1068+
*/
1069+
test("Complexity validation", function() {
1070+
1071+
clearForm();
1072+
1073+
var values = [
1074+
{val:input('abcdefgh', {'':'complexity'}), isValid:true},
1075+
{val:input('ABCDEFGH', {'':'complexity'}), isValid:true},
1076+
{val:input('12345678', {'':'complexity'}), isValid:true},
1077+
{val:input('@|#{}[]', {'':'complexity'}), isValid:true},
1078+
{val:input('abcdefgh', {'require-lc-letter':'2', '':'complexity'}), isValid:true},
1079+
{val:input('12@ABCDEFgh', {'require-lc-letter':'2', '':'complexity'}), isValid:true},
1080+
{val:input('12@ABCDEFGh', {'require-lc-letter':'2', '':'complexity'}), isValid:false},
1081+
{val:input('12@ABCDEFGH', {'require-lc-letter':'2', '':'complexity'}), isValid:false},
1082+
{val:input('12@ABCDEFGH', {'require-uc-letter':'2', '':'complexity'}), isValid:true},
1083+
{val:input('12@abcdefGH', {'require-uc-letter':'2', '':'complexity'}), isValid:true},
1084+
{val:input('12@abcdefgH', {'require-uc-letter':'2', '':'complexity'}), isValid:false},
1085+
{val:input('12@abcdefgh', {'require-uc-letter':'2', '':'complexity'}), isValid:false},
1086+
{val:input('@{}[]', {'require-special-char':'2', '':'complexity'}), isValid:true},
1087+
{val:input('12abcdfgh{}', {'require-special-char':'2', '':'complexity'}), isValid:true},
1088+
{val:input('12abcdefgh{', {'require-special-char':'2', '':'complexity'}), isValid:false},
1089+
{val:input('12abcdefgh', {'require-special-char':'2', '':'complexity'}), isValid:false},
1090+
{val:input('12345678', {'require-numeral':'2', '':'complexity'}), isValid:true},
1091+
{val:input('@abcdfgh78', {'require-numeral':'2', '':'complexity'}), isValid:true},
1092+
{val:input('@abcdefgh1', {'require-numeral':'2', '':'complexity'}), isValid:false},
1093+
{val:input('@abcdefgh', {'require-numeral':'2', '':'complexity'}), isValid:false},
1094+
{val:input('abCD{}12', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:true},
1095+
{val:input('abCD{}1', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1096+
{val:input('abCD{12', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1097+
{val:input('abC{}12', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1098+
{val:input('aCD{}12', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1099+
{val:input('abCD{1', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1100+
{val:input('abC{1', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1101+
{val:input('aCD{1', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1102+
{val:input('aD{1', {'require-lc-letter':'2', 'require-uc-letter':'2', 'require-special-char':'2', 'require-numeral':'2', '':'complexity'}), isValid:false},
1103+
{val:input('aDDFV{}@1356', {'require-lc-letter':'4', 'require-uc-letter':'2', 'require-special-char':'3', 'require-numeral':'2', '':'complexity'}), isValid:false}
1104+
];
10661105

1106+
$.each(values, function(i, obj) {
1107+
runTest(obj, 'complexity');
1108+
});
1109+
});
1110+
1111+
// TODO: Write more tests...
10671112
}
10681113

10691114
$.validate({

0 commit comments

Comments
 (0)