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

如何修改现有Joi schema以满足指定的多字段联动校验规则?

调整后的完整Joi Schema代码

const schema = Joi.object({
  a: Joi.any()
    .when(Joi.object({ b: true }).unknown(), { then: Joi.forbidden() })
    .when(Joi.object({ c: true }).unknown(), { then: Joi.forbidden() })
    .required(),
  b: Joi.boolean().default(false),
  c: Joi.boolean().default(false)
})
// 实现b、c不可同时为true的校验规则
.custom((value, helpers) => {
  if (value.b && value.c) {
    return helpers.message('字段b和c不可同时为true');
  }
  return value;
});

调整逻辑说明

  • 字段a的规则通过Joi内置的when条件校验实现:只要检测到b或c任意一个取值为true,就将a设为禁止传入状态,其余场景保留必填属性,完全匹配需求。
  • b和c的互斥规则通过custom自定义校验实现,直接判断两个字段的取值即可,比内置互斥方法更适配当前两个字段都有默认值、始终存在的场景,可读性更高。

校验效果验证

  • 当b=true、c=false 或 b=false、c=true时,传入a字段会触发校验失败
  • 当b=false、c=false时,不传入a字段会触发校验失败
  • 当b=true、c=true时,直接触发自定义校验错误提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:27:01