I have this script that I use to validate a number input field
if (fieldElement.getAttribute('type') == 'number') {
var numberRegExp = /^\d{4}$/;
var numberValidated = numberRegExp.test(fieldElement.value.trim());
if (!numberValidated) {
validated = false;
if (!fieldElement.hasClass('error')) {
if (fieldElement.nextElementSibling != undefined) {
fieldElement.nextElementSibling.removeClass('js-hide');
fieldElement.addClass('error');
} else {
var fieldErrorMessage = fieldElement.getAttribute('data-msg');
var errorMessage = document.createElement('span');
fieldElement.addClass('error');
setTimeout(function () {
errorMessage.addClass('error');
errorMessage.innerHTML = fieldErrorMessage;
}, timeout);
fieldElement.parentNode.appendChild(errorMessage);
}
}
}
}
But I cannot find a solution to use
var numberRegExp = /^\d{4}$/;
with a data attribute with a min / max value
<input type="number" data-minlength="10" data-maxlength="10" />
like
var numberRegExp = /^\d{fieldElement.getAttribute('data-minlength')}$/;
which of course will not work
EDIT: Bah! Had a brainfart!
I can just check the length of the value
var minlength = fieldElement.getAttribute('data-rule-minlength');
var maxlength = fieldElement.getAttribute('data-rule-maxlength');
if(fieldElement.value.length < minlength || fieldElement.value.length > maxlength) {
numberValidated = false;
}