有人能告诉我如何使用 JSON Schema 验证只接受 YYYY-MM-DD
格式的日期吗?
我的示例 JSON:
{"data1" : "foo", "date" :"2016-11-24"}
有人能告诉我如何使用 JSON Schema 验证只接受 YYYY-MM-DD
格式的日期吗?
我的示例 JSON:
{"data1" : "foo", "date" :"2016-11-24"}
JSON Schema已经定义了日期、时间、日期时间、电子邮件、主机名和IP地址的格式。相比编写自己的正则表达式,您可以选择这种更简单和推荐的方法。
"date": {
"type": "string",
"format": "date"
}
日期和时间格式的名称来自于RFC 3339,第5.6节[RFC3339]。
参考资料:http://json-schema.org/latest/json-schema-validation.html#rfc.section.7.3
ajv
,它考虑了格式字段并进行验证。 您可能需要与您使用的验证器进行检查。 @TroyWeber - Ram Babuajv
支持此行为。 - Troy Weber在JSON Schema中添加正则表达式,请使用以下内容:
{
"type": "string",
"pattern": "^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$"
}
\\d
- bwicklund^(?:\d{4})-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])$
- Abinash请使用以下解决方案...它适用于所有格式为YYYY-MM-DD或YYYY/MM/DD的日期。它验证了闰年并限制了二月份的日期。
{
"type": "string",
"pattern": "(((19|20)([2468][048]|[13579][26]|0[48])|2000)[/-]02[/-]29|((19|20)[0-9]{2}[/-](0[469]|11)[/-](0[1-9]|[12][0-9]|30)|(19|20)[0-9]{2}[/-](0[13578]|1[02])[/-](0[1-9]|[12][0-9]|3[01])|(19|20)[0-9]{2}[/-]02[/-](0[1-9]|1[0-9]|2[0-8])))"
}
{"type":"number"}
使用ISO 8601时间戳代替正则表达式:
{"type":"string","pattern":"^(?:[1-9][0-9]{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9][0-9](?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:Z|[+-][01][0-9]:[0-5][0-9])$"}
注意:也许非捕获组需要被移除。我用于测试的实现接受它。这可能取决于具体实现。