Skip to content

Commit 7615974

Browse files
ENGCOM-2861: [Forwardport] 16544: fixed behaviour when some of JS validation rules making fields required #17724
2 parents 4f32cdd + 5a9410d commit 7615974

File tree

2 files changed

+36
-22
lines changed
  • app/code/Magento/Ui/view/base/web/js/lib/validation
  • dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/validation

2 files changed

+36
-22
lines changed

app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -73,63 +73,67 @@ define([
7373
],
7474
'max-words': [
7575
function (value, params) {
76-
return utils.stripHtml(value).match(/\b\w+\b/g).length < params;
76+
return utils.isEmpty(value) || utils.stripHtml(value).match(/\b\w+\b/g).length < params;
7777
},
7878
$.mage.__('Please enter {0} words or less.')
7979
],
8080
'min-words': [
8181
function (value, params) {
82-
return utils.stripHtml(value).match(/\b\w+\b/g).length >= params;
82+
return utils.isEmpty(value) || utils.stripHtml(value).match(/\b\w+\b/g).length >= params;
8383
},
8484
$.mage.__('Please enter at least {0} words.')
8585
],
8686
'range-words': [
8787
function (value, params) {
8888
var match = utils.stripHtml(value).match(/\b\w+\b/g) || [];
8989

90-
return match.length >= params[0] &&
90+
return utils.isEmpty(value) || match.length >= params[0] &&
9191
match.length <= params[1];
9292
},
9393
$.mage.__('Please enter between {0} and {1} words.')
9494
],
9595
'letters-with-basic-punc': [
9696
function (value) {
97-
return /^[a-z\-.,()\u0027\u0022\s]+$/i.test(value);
97+
return utils.isEmpty(value) || /^[a-z\-.,()\u0027\u0022\s]+$/i.test(value);
9898
},
9999
$.mage.__('Letters or punctuation only please')
100100
],
101101
'alphanumeric': [
102102
function (value) {
103-
return /^\w+$/i.test(value);
103+
return utils.isEmpty(value) || /^\w+$/i.test(value);
104104
},
105105
$.mage.__('Letters, numbers, spaces or underscores only please')
106106
],
107107
'letters-only': [
108108
function (value) {
109-
return /^[a-z]+$/i.test(value);
109+
return utils.isEmpty(value) || /^[a-z]+$/i.test(value);
110110
},
111111
$.mage.__('Letters only please')
112112
],
113113
'no-whitespace': [
114114
function (value) {
115-
return /^\S+$/i.test(value);
115+
return utils.isEmpty(value) || /^\S+$/i.test(value);
116116
},
117117
$.mage.__('No white space please')
118118
],
119119
'zip-range': [
120120
function (value) {
121-
return /^90[2-5]-\d{2}-\d{4}$/.test(value);
121+
return utils.isEmpty(value) || /^90[2-5]-\d{2}-\d{4}$/.test(value);
122122
},
123123
$.mage.__('Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx')
124124
],
125125
'integer': [
126126
function (value) {
127-
return /^-?\d+$/.test(value);
127+
return utils.isEmpty(value) || /^-?\d+$/.test(value);
128128
},
129129
$.mage.__('A positive or negative non-decimal number please')
130130
],
131131
'vinUS': [
132132
function (value) {
133+
if (utils.isEmpty(value)) {
134+
return true;
135+
}
136+
133137
if (value.length !== 17) {
134138
return false;
135139
}
@@ -215,33 +219,35 @@ define([
215219
],
216220
'time': [
217221
function (value) {
218-
return /^([01]\d|2[0-3])(:[0-5]\d){0,2}$/.test(value);
222+
return utils.isEmpty(value) || /^([01]\d|2[0-3])(:[0-5]\d){0,2}$/.test(value);
219223
},
220224
$.mage.__('Please enter a valid time, between 00:00 and 23:59')
221225
],
222226
'time12h': [
223227
function (value) {
224-
return /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\s[AP]M))$/i.test(value);
228+
return utils.isEmpty(value) || /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\s[AP]M))$/i.test(value);
225229
},
226230
$.mage.__('Please enter a valid time, between 00:00 am and 12:00 pm')
227231
],
228232
'phoneUS': [
229233
function (value) {
230234
value = value.replace(/\s+/g, '');
231235

232-
return value.length > 9 && value.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
236+
return utils.isEmpty(value) || value.length > 9 &&
237+
value.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
233238
},
234239
$.mage.__('Please specify a valid phone number')
235240
],
236241
'phoneUK': [
237242
function (value) {
238-
return value.length > 9 && value.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/);
243+
return utils.isEmpty(value) || value.length > 9 &&
244+
value.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/);
239245
},
240246
$.mage.__('Please specify a valid phone number')
241247
],
242248
'mobileUK': [
243249
function (value) {
244-
return value.length > 9 && value.match(/^((0|\+44)7\d{3}\s?\d{6})$/);
250+
return utils.isEmpty(value) || value.length > 9 && value.match(/^((0|\+44)7\d{3}\s?\d{6})$/);
245251
},
246252
$.mage.__('Please specify a valid mobile number')
247253
],
@@ -253,20 +259,24 @@ define([
253259
],
254260
'email2': [
255261
function (value) {
256-
return /^((([a-z]|\d|[!#\$%&\u0027\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&\u0027\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\u0022)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\u0022)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);//eslint-disable-line max-len
262+
return utils.isEmpty(value) || /^((([a-z]|\d|[!#\$%&\u0027\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&\u0027\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\u0022)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\u0022)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);//eslint-disable-line max-len
257263
},
258264
$.validator.messages.email
259265
],
260266
'url2': [
261267
function (value) {
262-
return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);//eslint-disable-line max-len
268+
return utils.isEmpty(value) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&\u0027\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);//eslint-disable-line max-len
263269
},
264270
$.validator.messages.url
265271
],
266272
'credit-card-types': [
267273
function (value, param) {
268274
var validTypes;
269275

276+
if (utils.isEmpty(value)) {
277+
return true;
278+
}
279+
270280
if (/[^0-9-]+/.test(value)) {
271281
return false;
272282
}
@@ -351,19 +361,19 @@ define([
351361
],
352362
'ipv4': [
353363
function (value) {
354-
return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(value);//eslint-disable-line max-len
364+
return utils.isEmpty(value) || /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(value);//eslint-disable-line max-len
355365
},
356366
$.mage.__('Please enter a valid IP v4 address.')
357367
],
358368
'ipv6': [
359369
function (value) {
360-
return /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);//eslint-disable-line max-len
370+
return utils.isEmpty(value) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);//eslint-disable-line max-len
361371
},
362372
$.mage.__('Please enter a valid IP v6 address.')
363373
],
364374
'pattern': [
365375
function (value, param) {
366-
return new RegExp(param).test(value);
376+
return utils.isEmpty(value) || new RegExp(param).test(value);
367377
},
368378
$.mage.__('Invalid format.')
369379
],
@@ -845,7 +855,7 @@ define([
845855
return validateCreditCard(value);
846856
}
847857

848-
return false;
858+
return true;
849859
},
850860
$.mage.__('Please enter a valid credit card number.')
851861
],
@@ -886,10 +896,14 @@ define([
886896
],
887897
'validate-per-page-value-list': [
888898
function (value) {
889-
var isValid = !utils.isEmpty(value),
899+
var isValid = utils.isEmpty(value),
890900
values = value.split(','),
891901
i;
892902

903+
if (isValid) {
904+
return true;
905+
}
906+
893907
for (i = 0; i < values.length; i++) {
894908
if (!/^[0-9]+$/.test(values[i])) {
895909
isValid = false;

dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/validation/rules.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ define([
1515
var value = '',
1616
params = [1,3];
1717

18-
expect(rules['range-words'].handler(value, params)).toBe(false);
18+
expect(rules['range-words'].handler(value, params)).toBe(true);
1919
});
2020

2121
it('Check on redundant words', function () {

0 commit comments

Comments
 (0)