2016-12-07 8 views
0

У меня есть сценарий, где мне нужно проверить количество ватов с различным регулярным выражением в зависимости от того, в какой стране оно находится. Поэтому, когда поле language является SE я хочу использовать это регулярное выражение /^\d{6}-\d{4}$/ на поле company.vatNo, но когда поле language является NO я хочу использовать этот один /^\d{9}(MVA)?$/ .. Я думал, что я мог бы пойти с Joi-х, когда(), но это не кажется работать вообще. Кто-нибудь знает, как я могу это достичь?Проверка Hapi/Joi - разные Joi.regex в зависимости от другого значения ключа

Вот мой маршрут, где я проверить:

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() 
      }) 

     } 
     } 
    } 
    } 
} 

Благодарности

+0

Почему бы просто не использовать «переключатель», чтобы установить значение регулярного выражения на основе языка? –

+0

Где я могу использовать переключатель в этой ситуации? @JaredSmith – Jojo

+0

У вас есть доступ к заголовку Accept-Language, просто введите код, который проверяет его и назначает соответствующее регулярное выражение переменной, которую вы затем используете для проверки. –

ответ

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') 
     }),