0

我有一个场景,我需要使用不同的正则表达式验证增值税号,具体取决于它所在的国家/地区。因此,当该字段languageSE我想/^\d{6}-\d{4}$/在该字段上使用这个正则表达式时company.vatNo,但是当该字段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()
           })

        }
      }
    }
  }
}

谢谢

4

1 回答 1

2

这是解决方案。似乎 Joi 无法识别language是否vatNo在另一个对象内。但这解决了问题:

    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')
        }),
于 2016-12-08T14:48:06.970 回答