基于其他字段的Zod验证:如何实现特定互斥规则校验?
JS对象二选一验证实现方案
要实现你需要的验证规则,核心就是判断两个字段必须一个为空、另一个不为空,也就是逻辑上的异或(XOR)关系——两个字段的非空状态必须完全相反。
步骤1:定义空值判断辅助函数
实际场景里的“空”可能包括空字符串、undefined、null,先写一个通用的空值判断函数:
// 判断字段是否为空(涵盖空字符串、undefined、null) function isEmpty(value) { return value === undefined || value === null || value.trim() === ''; }
步骤2:编写验证函数
基于辅助函数,用异或逻辑实现验证规则:
function validateFields(obj) { const field1NotEmpty = !isEmpty(obj.field1); const field2NotEmpty = !isEmpty(obj.field2); // 异或逻辑:两个状态必须一真一假 return field1NotEmpty !== field2NotEmpty; }
测试验证效果
分别测试四种场景:
- 两个字段均为空:
const case1 = { field1: '', field2: null }; console.log(validateFields(case1)); // false(验证不通过)
- 两个字段均不为空:
const case2 = { field1: 'test', field2: 'test1' }; console.log(validateFields(case2)); // false(验证不通过)
- field1为空,field2不为空:
const case3 = { field1: '', field2: 'test1' }; console.log(validateFields(case3)); // true(验证通过)
- field1不为空,field2为空:
const case4 = { field1: 'test', field2: undefined }; console.log(validateFields(case4)); // true(验证通过)
内容的提问来源于stack exchange,提问作者Kirill Novikov
相关产品推荐
相关产品推荐

