我正在建立一个包含两个字段的表单;开始月和结束月。
开始月份和结束月份仅由对应月份的整数(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
答案 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。希望有帮助!