Javascript 如何使用Joi仅验证嵌套对象上的字符串
我的目标是允许任意深度的嵌套对象包含任何内容。在这个嵌套对象中,我只想对字符串执行额外的验证 因此,对象可以如下所示:Javascript 如何使用Joi仅验证嵌套对象上的字符串,javascript,node.js,validation,joi,Javascript,Node.js,Validation,Joi,我的目标是允许任意深度的嵌套对象包含任何内容。在这个嵌套对象中,我只想对字符串执行额外的验证 因此,对象可以如下所示: { "features": { "feature1": "value1", "feature2": false, "feature3": 321, "feature4": { "something": "else" }, "feature5": ["something", "more"] } 对于所有字符串值,我
{
"features": {
"feature1": "value1",
"feature2": false,
"feature3": 321,
"feature4": {
"something": "else"
},
"feature5": ["something", "more"]
}
对于所有字符串值,我希望执行一些额外的验证,但对于其他所有内容,我只希望将其视为有效
我只是其中的一部分,需要一些处理嵌套对象之类的帮助。以下是我得到的:
var providerSchema = Joi.object().keys({
features: Joi.object().pattern(/^/, Joi.alternatives()
.when(Joi.ref('features'), {
is: Joi.string(),
then: validateBlacklist(['<', '>']),
otherwise: Joi.any()
}))
});
function validateBlacklist(list) {
let regex = new RegExp(`^(?:(?!${list.join('|')}).)*$`);
return Joi.string().regex(regex)
.options({language: { string: { regex: { base: 'contains an invalid character'}}}});
}
var providerSchema=Joi.object().keys({
特性:Joi.object().pattern(/^/,Joi.alternations()
.when(Joi.ref(“特征”){
is:Joi.string(),
然后:ValidateBlaklist(['']),
否则:Joi.any()
}))
});
函数ValidateBlakList(列表){
让regex=newregexp(`^(?:(?!${list.join('|')})。*$`);
返回Joi.string().regex(regex)
.options({language:{string:{regex:{base:'包含无效字符'}}});
}
问题1:Alternations()。当()仅接受字符串时
目前,features对象中只接受字符串。似乎替代品()when()部分工作不正常。我试图检查引用是否是字符串;如果是,则通过validateBlaclist()执行额外的验证,否则,接受它
问题2:不支持嵌套对象
“我的验证”不支持对象中的对象。此嵌套需要支持任意深度,因为此features对象可以包含任何内容
有人知道怎么处理这个吗?任何帮助都将不胜感激
多谢各位