当谈到 joi 的 .or() 函数时,我似乎遇到了障碍,因为它似乎没有像我预期的那样实现。
我有 2 个文本输入字段,它们都有自己的验证方式,但至少只需要一个。
const schema = joi
.object({
"either-this-field": joi.string().trim().max(26),
"or-this-field": joi
.string()
.trim()
.regex(/^\d+$/)
.max(26)
"other-field-1": joi.string().required(),
"other-field-2": joi.string().max(40).required(),
})
.or("either-this-field", "or-this-field");
这 or 似乎没有像我期望的那样做,并且 or 中的每个字段都按照它自己的验证规则进行了验证
如果两个字段都没有值,那么我将显示两个字段的错误,直到至少有一个完成
最佳答案
var schema = Joi.alternatives().try(
Joi.object().keys({
a: Joi.string().allow(''),
b: Joi.string()
}),
Joi.object().keys({
a: Joi.string(),
b: Joi.string().allow('')
})
);
alternatives().try()
添加了一个替代模式类型,用于尝试匹配已验证的值。您正在传递两个选项,它会选择其中一个。
关于javascript - Joi 验证 2 个输入字段中至少有一个已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74236584/