0

国によって異なる正規表現で vat 番号を検証する必要があるシナリオがあります。したがって、フィールドlanguageがフィールドでSEこの正規表現を使用したいのですが、フィールドがこれを使用したい.. Joiのwhen()を使用できると思ったのですが、まったく機能していないようです。どうすればこれを達成できるか知っている人はいますか?/^\d{6}-\d{4}$/company.vatNolanguageNO/^\d{9}(MVA)?$/

ここに私が検証する私のルートがあります:

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 に答える