使用Yup验证多个输入字段

时间:2018-07-30 08:01:54

标签: javascript reactjs formik yup

我目前正在使用Formik,并通过Yup进行验证。

我要验证两个日期,一个开始日期和一个结束日期。

开始时这很简单,我有两个输入字段,start_dateend_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_dateend_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_monthstart_date_year。本质上,我需要用-来补充它们,以再次创建MM-YYYY

有什么想法要用Yup做到吗?

1 个答案:

答案 0 :(得分:0)

非常短暂的问题。看来您可以只通过let {start_date_year} = this.parent测试中的其他输入,例如:start_date_month