Javascript 多重';何时';关于Joi验证的条件 上下文 节点版本:6.11.3 joi版本:10.0.6 环境(节点、浏览器):浏览器 与(hapi,独立,…)一起使用:独立 任何其他相关信息:如果我一次只评论一个条件,那么这两个条件都可以独立工作

Javascript 多重';何时';关于Joi验证的条件 上下文 节点版本:6.11.3 joi版本:10.0.6 环境(节点、浏览器):浏览器 与(hapi,独立,…)一起使用:独立 任何其他相关信息:如果我一次只评论一个条件,那么这两个条件都可以独立工作,javascript,validation,joi,Javascript,Validation,Joi,我正在努力实现的目标 我有一个单选按钮组,它需要一个两部分验证模式,根据彼此的值有条件地要求两部分。如果用户选择最后一个选项“其他”,则会出现一个输入字段,供用户手动输入另一个数字 如果未选择第四个选项,则第一次验证应要求选择前三个选项。 如果选择值为“其他”,则第二次验证应忽略输入掩码,并要求输入中填入10位电话号码 const cardContactSchema = { selectedCardNumber: Joi.string() .label('Phone Number')

我正在努力实现的目标

我有一个单选按钮组,它需要一个两部分验证模式,根据彼此的值有条件地要求两部分。如果用户选择最后一个选项“其他”,则会出现一个输入字段,供用户手动输入另一个数字

如果未选择第四个选项,则第一次验证应要求选择前三个选项。

如果选择值为“其他”,则第二次验证应忽略输入掩码,并要求输入中填入10位电话号码

const cardContactSchema = {
  selectedCardNumber: Joi.string()
    .label('Phone Number')
    .when('otherPreferredCardNumber', {
      is: Joi.string().empty(''),
      then: Joi.string().required(),
    }),
  otherPreferredCardNumber: Joi.string()
    .label('Phone Number')
    .when('selectedCardNumber', {
      is: 'other',
      then: Joi.string()
        .replace(/\D/g, '')
        .length(10)
        .required()
        .options({
          language: {
            string: {
              length: 'length must be {{limit}} digits',
            },
          },
        }),
      otherwise: Joi.string().optional(),
    }),
};

当前结果:

错误:添加到组otherPreferredCardNumber的项目创建了一个依赖项错误(otherPreferredCardNumber)

我的期望: 如果未选择第四个选项,则第一次验证应要求选择前三个选项。

如果选择值为“其他”,则第二次验证应忽略输入掩码,并要求输入中填入10位电话号码

const cardContactSchema = {
  selectedCardNumber: Joi.string()
    .label('Phone Number')
    .when('otherPreferredCardNumber', {
      is: Joi.string().empty(''),
      then: Joi.string().required(),
    }),
  otherPreferredCardNumber: Joi.string()
    .label('Phone Number')
    .when('selectedCardNumber', {
      is: 'other',
      then: Joi.string()
        .replace(/\D/g, '')
        .length(10)
        .required()
        .options({
          language: {
            string: {
              length: 'length must be {{limit}} digits',
            },
          },
        }),
      otherwise: Joi.string().optional(),
    }),
};