Hapi/Joi 验证 - 不同 Joi.regex 取决于另一个键值
Hapi/Joi validation - different Joi.regex depending on another key value
我有一个场景,我需要根据所在国家/地区使用不同的正则表达式来验证增值税号。因此,当字段 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()
})
}
}
}
}
}
谢谢
这是解决方案。如果 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')
}),
我有一个场景,我需要根据所在国家/地区使用不同的正则表达式来验证增值税号。因此,当字段 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()
})
}
}
}
}
}
谢谢
这是解决方案。如果 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')
}),