如何使用Yup验证一个字段与另一个字段?

时间:2019-06-20 23:57:41

标签: reactjs yup

我正在建立一个包含两个字段的表单;开始月和结束月。

开始月份和结束月份仅由对应月份的整数(0-11)表示。我需要验证以确保结束月份在开始月份之后(例如,结束月份的整数较大)。

几年前,我也研究过其他类似的问题,但是,yup似乎已进行了更新,使它们变得毫无用处。我尝试了以下代码,并做了一些改动。

我也很难验证月份的数字(.number()-我假设我可能必须在测试函数中执行此操作。

let schema = yup.object().shape({
  startMonth: yup
    .number()
    .required()
    .positive()
    .integer(),
  endMonth: Yup.string().test(
  "End Month Validation",
  "error message",
  value => {
    return value > startMonth;
  }
)
.number()
.required()
.positive()
.integer(),
});
  

错误:   第102行:“ startMonth”未定义为no-undef

1 个答案:

答案 0 :(得分:2)

另一种方法是利用.ref().moreThan()来执行此验证逻辑。

类似以下内容应该可以满足您的要求:

let schema = Yup.object().shape({
  startMonth: Yup
    .number()
    .required()
    .positive()
    .integer(),
  endMonth: Yup.number() /* Remove .string() */
    .required()
    .positive()
    /* Reference startMonth field in validating endMonth value */
    .moreThan(Yup.ref('startMonth'), "End month must come after start month")
    .integer(),
});

schema.validate({ startMonth : 1, endMonth : 2 })  // Okay!
schema.validate({ startMonth : 11, endMonth : 2 }) // Throws exception

例如,see this codepen。希望有帮助!