验证验证是否不为空

时间:2020-06-03 08:55:10

标签: yup

const validationSchema = Yup.object().shape({
  newPassword: Yup.string().min(8, 'Password must be at least 8 characters');
});

我只想在newPassword字段不为空时进行验证检查。 我该怎么办?

4 个答案:

答案 0 :(得分:5)

解决这个问题有不同的方法。

使用测试

const validationSchema = Yup.object().shape({
          newPassword: Yup.string().test('empty-check','Password must be at least 8 characters',password=>password.length==0

使用何时

 const validationSchema = Yup.object().shape({
      newPassword: Yup.string().when('newPassword',{
             is:(password)=>password.length>0
             then: Yup.string().min(8, 'Password must be at least 8 characters');
    });

答案 1 :(得分:4)

使用测试的替代方法:

const validationSchema = Yup.object().shape({
    newPassword: Yup.string().test(
        'empty-or-8-characters-check',
        'Password must be at least 8 characters',
        password => !password || password.length >= 8,
    ),
});

答案 2 :(得分:1)

我使用了 Yup 函数 nullable(),因此如果它不为空,则仅使用下一个函数对其进行验证:

kmBegin: Yup.number().nullable().positive().integer(),
parcelTotal: Yup.number().positive().integer(),
timeBegin: Yup.date(),
timeEnd: Yup.date().nullable(),

答案 3 :(得分:0)

有一种使用 .when() 的方法,而不是像接受的答案那样生成循环依赖,.shape() 接受一个详尽的依赖列表作为最后一个参数,它解决了循环冲突,秘密是使用同一个键两次https://github.com/jquense/yup/issues/176#issuecomment-369925782

const validationSchema = Yup.object().shape({
    newPassword: Yup.string().test(
        'empty-or-8-characters-check',
        'Password must be at least 8 characters',
        password => !password || password.length >= 8,
    ),
}, [["newPassword","newPassword"]]);
相关问题