Joi 验证多个条件

Posted

技术标签:

【中文标题】Joi 验证多个条件【英文标题】:Joi validation multiple conditions 【发布时间】:2014-12-18 00:38:38 【问题描述】:

我有以下架构:

var testSchema = Joi.object().keys(
    a: Joi.string(), 
    b: Joi.string(), 
    c: Joi.string().when('a', 'is': 'avalue', then: Joi.string().required())
);

但我想在 c 字段定义上添加一个条件,以便在以下情况下需要它:

a == 'avalue' AND b=='bvalue'

我该怎么做?

【问题讨论】:

【参考方案1】:

Gergo Erdosi 的回答不适用于 Joi 14.3.0,这导致了 OR 条件:

a === 'avalue' || b === 'bvalue'

以下内容对我有用:

var schema = 
  a: Joi.string(),
  b: Joi.string(),
  c: Joi.string().when(
    'a', 
      is: 'avalue',
      then: Joi.when(
        'b', 
          is: 'bvalue',
          then: Joi.string().required()
        
      )
    
  )
;

这导致a === 'avalue' && b === 'bvalue'

【讨论】:

是的,我认为这也是一个更好的语法【参考方案2】:

您可以连接两个when 规则:

var schema = 
    a: Joi.string(),
    b: Joi.string(),
    c: Joi.string().when('a',  is: 'avalue', then: Joi.string().required() ).concat(Joi.string().when('b',  is: 'bvalue', then: Joi.string().required() ))
;

【讨论】:

如果我想对值进行分组怎么办。比如说什么时候取一组值中的一个并设置验证规则? 我也想要。需要检查键是否在数组中有值。

以上是关于Joi 验证多个条件的主要内容,如果未能解决你的问题,请参考以下文章

Joi 验证器条件模式

工作区身份验证:多个令牌与条件匹配

如何在没有if条件swift的情况下验证多个值[关闭]

Joi验证忽略嵌套键

JOI 电子邮件验证

hapi route joi 验证密码确认