Как проверить минимальный возраст с Yup?
Я создал некоторые регистрации Schema
export const registrationSchema = (translate) => Yup.object().shape({
//... other properties that are validated.
// for example username
username: Yup.string()
.min(6, translate('validation:common.username.min', { min: 6 }))
.max(20, translate('validation:common.username.max', { max: 20 }))
.required(translate('validation:common.username.required')),
DOB: Yup.lazy(value => {
console.log('yup', value);
if (moment().diff(moment(value), 'years') < 18)
// Here return DOB error somehow
})
...
и до сих пор это работает как шарм. Но теперь мне нужно проверить, если пользователю минимум 18 лет. Я получаю DateOfBirth от выбора даты, и я могу проверить, не меньше ли он 18 с момента.
if(moment().diff(moment(date),'years) < 18)
и это значение даты, которое я получил при использовании Yup.lazy, но не знаю, как выдать ошибку проверки, если до 18 лет -display это в поле DOB. Я даже не знаю, правильно ли я использую метод YUP. Я хотел использовать yup.date(). но как получить выбранную дату внутри схемы, чтобы проверить, действительно ли это возраст.
3 ответа
Решение
Ты можешь использовать Yup.string
как это:
Yup.string().test(
"DOB",
"error message",
value => {
return moment().diff(moment(value),'years') >= 18;
}
)
если тестовая функция возвращает true
, поля проходят тест. Иначе ошибка установлена.
Начиная с ответа Baboo, используя date-dns:
import differenceInYears from 'date-fns/differenceInYears';
yup
.string()
.required('DOB is required')
.test('DOB', 'You must be adult', value => {
return differenceInYears(new Date(), new Date(value)) >= 18;
})