Custom validation methods
You can add custom validation method inline by using custom
name inside validation schema or pass custom validator inside options.validators
object.
Inline
custom
could be function or array of fuctions if you need multiple custom validators.
js
import { validate } from '@hiperf/validate';
const schema = {
message: {
custom(v) {
const errors = [];
if (!/🐈|😺|😸|😻|😽/.test(v))
errors.push('Message should contain cat emoji! 😾');
return errors;
}
}
};
const data = {
message: '🐶 woof!'
};
const { isValid, errors } = validate(schema, data);
// isValid = false
// errors = ['Message should contain cat emoji! 😾']
Inline (multiple)
Multiple custom validators example.
js
import { validate } from '@hiperf/validate';
const schema = {
message: {
custom: [
(v) => [
!/🐈|😺|😸|😻|😽/.test(v) ?
'Message should contain cat emoji! 😾' : ''
],
(v) => [
!/🐛|🐝|🐞|🐜|🦗/.test(v) ?
'Message should contain at less one bug! 🐸' : ''
],
]
}
};
const data = {
message: '🐶 woof!'
};
const { isValid, errors } = validate(schema, data);
// isValid = false
// errors = [
// 'Message should contain cat emoji! 😾',
// 'Message should contain at less one bug! 🐸'
// ]
TIP
If you return empty string
, null
, false
or 0
inside errors array, and that value will not count as error.
Custom validators
You can also pass custom validator method to options.validators
.
js
import { validate } from '@hiperf/validate';
const validators = {
isCatMessage: v => /🐈|😺|😸|😻|😽/.test(v)
};
const locales = {
en: { 'isCatMessage': 'Message should contain cat emoji! 😾' },
es: { 'isCatMessage': 'El mensaje debe contener emoji de gato.! 😾' },
};
const schema = {
message: {
isCatMessage: true,
}
};
const data = {
message: '🐶 woof!'
};
const { isValid, errors } = validate(schema, data, { lang: 'es', validators, locales });
// isValid = false
// errors = ['El mensaje debe contener emoji de gato.! 😾']
INFO
Default lang is en
, and it's used if you do not specify one inside options object.