【发布时间】:2016-12-08 22:48:06
【问题描述】:
我有一个场景,我需要使用不同的正则表达式验证增值税号,具体取决于它所在的国家/地区。所以当language字段是SE我想在company.vatNo字段上使用这个正则表达式/^\d{6}-\d{4}$/,但是当language字段是NO我想用这个/^\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()
})
}
}
}
}
}
谢谢
【问题讨论】:
-
为什么不直接使用
switch来根据语言设置正则表达式的值? -
在这种情况下我可以在哪里使用开关? @JaredSmith
-
您可以访问 Accept-Language 标头,只需输入一个检查它的代码并将适当的正则表达式分配给一个变量,然后您可以使用该变量进行验证。
-
@JaredSmith 我在路由中使用 Hapijs 验证,所以在验证运行之前我无处可做您的建议。如果我使用预处理程序,它将在验证后运行。我的意思是,我可以在我的处理程序中执行您的建议,但是我还需要在处理程序中进行验证。
-
是的,我使用 Hapi 但手动验证。 OTOH,我的用例非常有限,可以手动完成,YMMV。
标签: javascript node.js hapijs joi