有人可以告诉我JSON模式验证仅接受YYYY-MM-DD
格式的日期吗?
我的示例JSON:
{"data1" : "foo", "date" :"2016-11-24"}
答案 0 :(得分:3)
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
答案 1 :(得分:2)
将正则表达式添加到json架构 在架构中使用以下内容。
{
"type": "string",
"pattern": "^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$"
}
答案 2 :(得分:0)
使用以下解决方案...对于所有日期为YYYY-MM-DD或YYYY / MM / DD的格式,它都应适用。它验证了leap年并将日期限制在2月。
{
"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])))"
}
答案 3 :(得分:0)
使用 seconds since EPOCH 或 Julian date 可能更容易:
{"type":"number"}
代替 regular expression 的 ISO 8601 time stamp:
{"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])$"}
注意: 也许必须删除非捕获组。我用于测试的实现接受了它。这可能取决于实现。