Yup验证问题:如何校验两个字段不相等?当前方案无效
Yup跨字段验证:校验两个字段不相等的正确方法
你之前用notOneOf的方式没法实现跨字段不相等校验,因为notOneOf的作用是校验当前字段的值不在指定的固定数组里,它没办法动态获取表单里另一个字段的实时值来做对比。
要实现两个字段不相等的校验,得用Yup的test方法,它允许你自定义校验逻辑,并且能访问到整个表单的所有字段值。
举个实际的实现例子,假设你要校验的当前字段是目标字段,需要和houseHoldMembers字段保持不相等:
yup.number() .required() .test( 'not-equal-to-houseHoldMembers', // 校验规则的唯一标识(可自定义) '两个字段的值不能相等', // 错误提示信息 function(value) { // 通过this.parent获取整个表单的所有字段值 const { houseHoldMembers } = this.parent; // 处理边界情况:如果houseHoldMembers还未填写,可根据需求返回true(跳过校验)或false if (houseHoldMembers === undefined || houseHoldMembers === null) { return true; } // 核心校验逻辑:当前字段值不等于houseHoldMembers的值 return value !== houseHoldMembers; } )
关键说明:
test方法的第三个参数是自定义校验函数,函数内部的this.parent可以拿到表单的全部字段值,这样就能实现跨字段的对比。- 一定要处理边界情况,比如另一个字段还未赋值的场景,避免出现不必要的校验错误。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

