luci-base: validation.js: count byte- instead of character length of strings

Fixes: #4055
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2020-05-17 21:34:30 +02:00
parent 01d5d5f929
commit 9a41673488

View file

@ -1,6 +1,10 @@
'use strict'; 'use strict';
'require baseclass'; 'require baseclass';
function bytelen(x) {
return new Blob([x]).size;
}
var Validator = baseclass.extend({ var Validator = baseclass.extend({
__name__: 'Validation', __name__: 'Validation',
@ -421,24 +425,23 @@ var ValidatorFactory = baseclass.extend({
}, },
length: function(len) { length: function(len) {
var val = '' + this.value; return this.assert(bytelen(this.value) == +len,
return this.assert(val.length == +len,
_('value with %d characters').format(len)); _('value with %d characters').format(len));
}, },
rangelength: function(min, max) { rangelength: function(min, max) {
var val = '' + this.value; var len = bytelen(this.value);
return this.assert((val.length >= +min) && (val.length <= +max), return this.assert((len >= +min) && (len <= +max),
_('value between %d and %d characters').format(min, max)); _('value between %d and %d characters').format(min, max));
}, },
minlength: function(min) { minlength: function(min) {
return this.assert((''+this.value).length >= +min, return this.assert(bytelen(this.value) >= +min,
_('value with at least %d characters').format(min)); _('value with at least %d characters').format(min));
}, },
maxlength: function(max) { maxlength: function(max) {
return this.assert((''+this.value).length <= +max, return this.assert(bytelen(this.value) <= +max,
_('value with at most %d characters').format(max)); _('value with at most %d characters').format(max));
}, },