我目前正在使用Formik,并通过Yup进行验证。
我要验证两个日期,一个开始日期和一个结束日期。
开始时这很简单,我有两个输入字段,start_date
和end_date
。这两个都是文本输入,它们接受以下格式MM-YYYY
。验证足够好,它首先使用moment(value, "MM-YYYY")
将字符串转换为日期。
由此,我们进行了以下测试:
start_date: Yup.string()
.test(
'test1',
'Format must be MM-YYYY',
function (value){
return moment(value, "MM-YYYY", true).isValid()
}
)
.test(
'test2',
'Start date must be before end date',
function(value){
let { end_date } = this.parent;
return moment(value, "MM-YYYY").isBefore(moment(end_date, "MM-YYYY"))
}
)
test1
仅检查MM-YYYY
是有效日期。 test2
检查start_date
在end_date
之前。为了简单起见,end_date
测试是相同的,除了有任何额外的测试。额外的测试会检查end_date
是否等于或小于当前日期。
这是我目前拥有的,但是我想要的是4个输入框:
start_date_month
(01、02、03 ...)start_date_year
(2000,2001 ...)end_date_month
end_date_year
这很容易做到,但是测试会有所不同,我不确定我们是否可以一起测试start_date_month
和start_date_year
。本质上,我需要用-
来补充它们,以再次创建MM-YYYY
。
有什么想法要用Yup做到吗?
答案 0 :(得分:0)
非常短暂的问题。看来您可以只通过let {start_date_year} = this.parent
测试中的其他输入,例如:start_date_month
。