You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
注册

如何在Joi Schema属性中禁用多个正则表达式模式?

解决Joi Schema禁用多个正则表达式模式的问题

你之前的两种写法都存在问题:

  • 第一种用.invalid()的思路不对,.invalid()是用来排除具体值的,无法用来排除匹配正则规则的字符串,所以不会生效。
  • 第二种用alternatives后加.not().match('all')的方式,因为alternatives属于类型分支规则,和你需要的string基础类型冲突,所以抛出了类型合并错误。

给你两种可行的解决方法:

方法一:用.not()结合alternatives.try()

直接在字符串规则里用.not()排除匹配任意目标正则的情况,把要禁用的正则模式用alternatives.try()组合起来:

const schema = Joi.object({
  a: Joi.string().not(
    Joi.alternatives().try(
      Joi.string().pattern(/^\d+$/),
      Joi.string().pattern(/^Hello \d+$/)
    )
  )
});

方法二:合并正则并启用invert选项

把多个禁用的正则用|合并成一个正则表达式,然后在.pattern()里设置invert: true,表示不匹配该正则的字符串才符合规则,这种写法更简洁:

const schema = Joi.object({
  a: Joi.string().pattern(/^\d+$|^Hello \d+$/, { invert: true })
});

这两种方式都能实现你要的「禁用多个正则模式」的效果,你可以根据实际场景选择。

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

火山引擎 最新活动