You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于其他字段的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;
}

测试验证效果

分别测试四种场景:

  1. 两个字段均为空:
const case1 = { field1: '', field2: null };
console.log(validateFields(case1)); // false(验证不通过)
  1. 两个字段均不为空:
const case2 = { field1: 'test', field2: 'test1' };
console.log(validateFields(case2)); // false(验证不通过)
  1. field1为空,field2不为空:
const case3 = { field1: '', field2: 'test1' };
console.log(validateFields(case3)); // true(验证通过)
  1. field1不为空,field2为空:
const case4 = { field1: 'test', field2: undefined };
console.log(validateFields(case4)); // true(验证通过)

内容的提问来源于stack exchange,提问作者Kirill Novikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:22:03