繁体   English   中英

Hapi / Joi验证-不同的Joi.regex,取决于另一个键值

[英]Hapi/Joi validation - different Joi.regex depending on another key value

我有一种情况,我需要根据国家/地区使用不同的正则表达式来验证增值税号。 因此,当现场languageSE我想在company.vatNo上使用此正则表达式/^\\d{6}-\\d{4}$/ ,但是当现场languageNO时,我想使用此正则表达式/^\\d{9}(MVA)?$/ ..我以为我可以使用Joi的when(),但它似乎根本不起作用。 有人知道我该怎么做到吗?

这是我验证的路线:

module.exports = {
  method: 'POST',
  path: '/signup/{partner}',
  handler: createPartner,
  config: {
    validate: {
      payload: {
        language: Joi.string().allow(config.supportedLanguages).required(),
        company: {
         vatNo: {

           Joi
           .when('language', {
             is: 'SE', 
             then: Joi.string().regex(/^\d{6}-\d{4}$/).required()
           })
           .when('language', {
             is: 'NO',
             then: Joi.string().regex(/^\d{9}(MVA)?$/).required()
           })
           .when('language', {
             is: 'FI',
             then: Joi.string().regex(/^\d{7}-\d{1}$/).required()
           })

        }
      }
    }
  }
}

谢谢

这是解决方案。 如果vatNo在另一个对象中,则Joi似乎无法识别language 但这解决了问题:

    language: Joi.any().valid(config.supportedLanguages).required(),
    vatNo:
      Joi.alternatives()
        .when('language', {
          is: Joi.string().regex(/^(SE)$/i),
          then: Joi.string().regex(/^\d{6}-\d{4}$/).label('companyID')
        })
        .when('language', {
          is: Joi.string().regex(/^(NO)$/i),
          then: Joi.string().regex(/^\d{9}(MVA)?$/).label('companyID')
        })
        .when('language', {
          is: Joi.string().regex(/^(FI)$/i),
          then: Joi.string().regex(/^\d{7}-\d{1}$/).label('companyID')
        }),

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM