I have a set of predefined rules which is loaded with a rest call from an external resource.
rules.yaml
rules:
firstname:
rule: value.length <= params.max
message: Bitte geben Sie nicht mehr als {{params.max}} Zeichen ein
params:
max: 20
lastname:
rule: value.length <= params.max
message: Bitte geben Sie nicht mehr als {{params.max}} Zeichen ein
params:
max: 30
Then i wrote a custom validator like this:
window.Parsley.addValidator('rules', {
rules: rules,
validateString: function (value, requirement) {
let constraint = rules[requirement];
if (constraint) {
let params = constraint.params;
if (constraint.message) {
let errorMessage = Mustache.render(constraint.message, {params: params, value: value});
}
return !value || eval(constraint.rule);
} else {
console.log('Invalid constraint: $requirement could not be found inside $rules');
return false;
}
},
requirementType: 'string',
messages: {
en: 'The string ist invalid %s.',
fr: 'Ce nombre n\'est pas un multiple de %s.'
}
});
Validation works as expected. But as you can see, the error message is dynamically computed during validation. How can Parsley use my computed message in this setup?
Instead of true
or false
, you can return a failed promise with the argument being the error message.
return $.Deferred().reject('Custom error message')