javascript 确保两个日期字段之一对Joi有效

new9mtju  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(98)

我已经找到了一个稍微不同版本的解决方案,但我需要的是确保两个字段中至少有一个包含有效的日期字符串。两个字段总是出现在数据中,但有时只有一个包含有效的日期字符串,而另一个是空字符串。
为了清楚起见,它应该验证其中一个或两个字段是否包含有效的日期字符串,并且只有当两个字段都不包含有效的日期字符串时才失败。
我试过这个模式:

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以我想要的方式验证它,我宁愿不这样修改数据。

bksxznpy

bksxznpy1#

我想这解决了你的问题。
我添加了“iso()”,因为你试图验证ISO 8601日期格式。如果你不使用“iso()”,它将接受任何数字作为日期。

Joi.object({
  date1: Joi.date().iso().empty(""),
  date2: Joi.date().iso().empty(""),
}).or("date1", "date2")

字符串

相关问题