使用 ajv 验证 UTC 日期/日期时间,但允许空字符串

Posted

技术标签:

【中文标题】使用 ajv 验证 UTC 日期/日期时间,但允许空字符串【英文标题】:Validate UTC date/date-time with ajv but allow empty strings 【发布时间】:2021-05-19 23:46:27 【问题描述】:

我需要验证字符串模式格式:"date" 或格式:"date-time" 以仅接受 ISO 8601 但也允许空字符串“”(“”要求应使用所需的架构)。


   "datetime1": 
      "type": "string",
      "format": "date-time",
   

但是,原生的 ajv 格式解析器不允许空字符串“”通过。如何让它允许空字符串,并且仍然验证 ISO 8601?

我真的必须使用ajv.addFormat() 编写自己的格式检查器吗? "format": "email" 也有同样的问题,我还需要 "" 才能有效。

注意:我无法修改架构,因此无法添加默认值。

【问题讨论】:

【参考方案1】:

让我们尝试使用 oneOf

date_to: 
  type: 'string',
  oneOf: [
    
      maxLength: 0
    ,
    
      format: 'date-time',
      minLength: 1
    
  ]
,

在第一个对象中,它将允许空字符串。在第二个对象中,它将根据您的格式检查输入

【讨论】:

以上是关于使用 ajv 验证 UTC 日期/日期时间,但允许空字符串的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:将 UTC 日期时间转换为传递时区的日期时间

Python将字符串转换为本地日期时间到UTC日期时间

关于在SQL Server中使用UTC时间保存当前日期的问题

SignalR 日期时间 IsoString 到 UTC

将 UTC 纪元转换为本地日期

在 PHP 中将 UTC 日期转换为本地时间