如何用yup和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岁。

if(moment().diff(moment(date),'years) < 18)

和我使用yup.lazy时获得的这个日期值,但是如果在DOB字段下以-DISPLOY以下18岁以下的验证错误,则不知道如何丢弃验证错误。我什至不知道我是否使用正确的YUP方法。我想使用yup.date()。但是如何在架构中获取挑选日期以检查是否有效年龄。

您可以这样使用Yup.string

Yup.string().test(
  "DOB",
  "error message",
  value => {
    return moment().diff(moment(value),'years') >= 18;
  }
)

如果测试功能返回true,则字段通过测试。否则设置了错误。

Yup.string()
.required("DOB is Required")
.test(
  "DOB",
  "Please choose a valid date of birth",
  (date) => moment().diff(moment(date), "years") >= 18
)

从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;
    })

相关内容

  • 没有找到相关文章

最新更新