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

如何用Joi实现互斥必填字段的验证规则?

Joi实现valueA与valueB的互斥非空验证

要实现你需要的“valueA为空时valueB必须有值,反之亦然”的互斥规则,可以借助Joi的xor()方法,配合字段的可选性与空值处理来完成。

修改后的Schema代码

const schema = Joi.object({
  valueA: Joi.string()
    .pattern(/^\d+(,\d{1,2})?(\.\d{1,2})?$/)
    .optional()
    .empty(''), // 将空字符串视为未提供该字段
  valueB: Joi.string()
    .pattern(/^\d+(,\d{1,2})?(\.\d{1,2})?$/)
    .optional()
    .empty('')
})
.xor('valueA', 'valueB'); // 强制两个字段互斥,只能有一个存在且有效

关键规则说明

  • .optional():标记字段为非必填,因为不需要强制两个字段都存在
  • .empty(''):把空字符串('')视为该字段未被提供,让Joi的互斥逻辑能正确识别“为空”的场景
  • .xor('valueA', 'valueB'):核心规则,要求对象中必须且只能有valueA或valueB其中一个字段符合验证规则——既不能同时为空,也不能同时有值

验证场景示例

  • 合法:{ valueA: '123' }、{ valueB: '45.67' }
  • 非法:{}(同时为空)、{ valueA: '123', valueB: '456' }(同时有值)、{ valueA: '', valueB: '' }(同时为空字符串)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:05