const validationSchema = Yup.object().shape({
newPassword: Yup.string().min(8, 'Password must be at least 8 characters');
});
我只想在newPassword字段不为空时进行验证检查。 我该怎么办?
答案 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"]]);