我正在使用Formik
和yup
进行验证。
对于验证两个字段started
和ended
started
必须是有效日期。started
必须是过去的日期。ended
可以为null,表示不需要。ended
不能为null,并且如果started
必须为有效日期
具有有效的日期值。这是我的验证模式:
validationSchema={yup.object().shape({
started: yup.date().max(new Date(), "Future date not allowed").typeError("Invalid Started date"),
ended: yup.date().default(null).when("started", {
is: yup.date().isValid(),
then: yup.date().min(yup.ref("started"), "Ended date must be later than Start date"),
otherwise: yup.date().nullable()
}).typeError("Invalid Ended date")
})}
1,2,3有效,但是第四个验证无效。
我还尝试将其更改为is: started => started !==null
,这是完全错误的,因为我console.log(started)
并打印了Invalid date
。
我什至尝试了is: true
也不起作用。
验证此要求的正确方法是什么?
答案 0 :(得分:1)
从这里https://stackoverflow.com/a/60277510得到了这个解决方案。
但是基本上,这将检查开始存在,然后检查结束时间是否晚:
ended: yup.date().default(null)
.when("started",
(started, yup) => started && yup.min(started, "End time cannot be before start time"))