如何使用 yup 和 moment.js 验证最小年龄?
How to validate min age with yup and moment.js?
我已经创建了一些 registrationSchema
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 岁 old.I 从日期选择器获取 DateOfBirth,我可以立即检查它是否小于 18。
if(moment().diff(moment(date),'years) < 18)
和我在使用 Yup.lazy 时得到的这个日期值,但如果未满 18 岁则不知道如何抛出验证错误以将其显示在 DOB 字段下。
我什至不知道我是否使用正确的 yup 方法。我想使用 yup.date()。但是如何在模式中获取选择日期以检查它是否是有效年龄。
您可以这样使用 Yup.string
:
Yup.string().test(
"DOB",
"error message",
value => {
return moment().diff(moment(value),'years') >= 18;
}
)
如果测试函数returns true
,字段通过测试。否则会设置错误。
Yup.string()
.required("DOB is Required")
.test(
"DOB",
"Please choose a valid date of birth",
(date) => moment().diff(moment(date), "years") >= 18
)
我已经创建了一些 registrationSchema
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 岁 old.I 从日期选择器获取 DateOfBirth,我可以立即检查它是否小于 18。
if(moment().diff(moment(date),'years) < 18)
和我在使用 Yup.lazy 时得到的这个日期值,但如果未满 18 岁则不知道如何抛出验证错误以将其显示在 DOB 字段下。 我什至不知道我是否使用正确的 yup 方法。我想使用 yup.date()。但是如何在模式中获取选择日期以检查它是否是有效年龄。
您可以这样使用 Yup.string
:
Yup.string().test(
"DOB",
"error message",
value => {
return moment().diff(moment(value),'years') >= 18;
}
)
如果测试函数returns true
,字段通过测试。否则会设置错误。
Yup.string()
.required("DOB is Required")
.test(
"DOB",
"Please choose a valid date of birth",
(date) => moment().diff(moment(date), "years") >= 18
)