我已经找到了一个稍微不同版本的解决方案,但我需要的是确保两个字段中至少有一个包含有效的日期字符串。两个字段总是出现在数据中,但有时只有一个包含有效的日期字符串,而另一个是空字符串。
为了清楚起见,它应该验证其中一个或两个字段是否包含有效的日期字符串,并且只有当两个字段都不包含有效的日期字符串时才失败。
我试过这个模式:
const schema = Joi.object({
date1: Joi.date(),
date2: Joi.date(),
})
.or("date1", "date2");
字符串
因此,这符合预期:
const doc = {
date1: "2023-12-01 20:00:00",
date2: "2023-12-02 20:00:00",
};
型
但这会失败,因为““date2”必须是有效日期“:
const doc = {
date1: "2023-12-01 20:00:00",
date2: "",
};
型
有了这个模式:
const schema = Joi.object({
date1: Joi.date().allow(null, ""),
date2: Joi.date().allow(null, ""),
})
.or("date1", "date2");
型
这现在验证了:
const doc = {
date1: "2023-12-01 20:00:00",
date2: "",
};
型
但这也证实了:
const doc = {
date1: "",
date2: "",
};
型
我最后的想法是遍历数据,如果它包含空字符串,则删除任何一个字段,以便第一个模式可以工作,但如果我可以用Joi以我想要的方式验证它,我宁愿不这样修改数据。
1条答案
按热度按时间bksxznpy1#
我想这解决了你的问题。
我添加了“iso()”,因为你试图验证ISO 8601日期格式。如果你不使用“iso()”,它将接受任何数字作为日期。
字符串