yyyy-mm-dd 的正则表达式日期验证 [重复]
Posted
技术标签:
【中文标题】yyyy-mm-dd 的正则表达式日期验证 [重复]【英文标题】:Regex date validation for yyyy-mm-dd [duplicate] 【发布时间】:2014-03-30 11:33:15 【问题描述】:日期格式 yyyy-mm-dd 的正则表达式是什么?
我想验证来自 edittext 的电子邮件并检查它是否与正则表达式匹配。
【问题讨论】:
也可以看看右边的“相关”部分,有很多类似的请求RegEx字符串进行日期验证的案例。 检查这个答案可能会有所帮助***.com/a/2149698/2675669 【参考方案1】:这将匹配yyyy-mm-dd
和yyyy-m-d
:
^\d4\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$
如果您正在寻找与 yyyy-mm-dd
完全匹配的内容,请尝试此操作
^\d4\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$
如果您需要在The date is 2017-11-30
之类的字符串中查找日期,请使用此日期
\d4\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*
https://regex101.com/r/acvpss/1
【讨论】:
你是如何制作图表的? @AllanXu 来自名为 debuggex 的站点 不完整!正则表达式也匹配 2016-02-31 而它不应该匹配:( @Djack 你在说什么?如果您想在其上强制执行实际日期,则正则表达式不是这样做的方法。解析日期并确保它在您使用的任何语言中都有效。这只是确保它的数字,用连字符分隔,并且有一天是可行的(小于 32) @AlanH 你可以使用/^\d4-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/
。这样,如果缺少前导零,则正则表达式将返回 false。【参考方案2】:
一个简单的应该是
\d4-\d2-\d2
Debuggex Demo
但这并不限制月份为 1-12 和天从 1 到 31。
还有更复杂的检查,就像其他答案一样,顺便说一句非常聪明的检查。不过,您必须检查有效日期,因为没有检查一个月是否有 28、30 或 31 天。
【讨论】:
哇。近 4 年后的第一次投反对票。这不值得另一个徽章吗? ;) 是的,它仍然应该被否决。这个答案是完全错误的,因为它不是日期验证的正则表达式。 为什么完全错了?正则表达式和规定的限制是正确的。我错过了什么? 仅将此评论添加到此答案也是一种误导。从这个意义上说,其他答案也是不正确的,因为它们也无法验证它。但是,如果您愿意,我会将其称为评论或大评论。 赞成以弥补反对票,因为这是唯一真正承认其局限性的答案。例如,较高投票的答案不会使 2 月 31 日无效。使用正则表达式捕获文本字段并使用其他完整性检查进行验证。【参考方案3】:您可以使用此正则表达式获取 yyyy-MM-dd 格式:
((?:19|20)\\d\\d)-(0?[1-9]|1[012])-([12][0-9]|3[01]|0?[1-9])
您可以找到日期验证的示例:How to validate date with regular expression.
【讨论】:
他想要 yyyy-mm-dd。 我已经更新了我的答案。【参考方案4】:你可以测试这个表达式:
^\d4[\-\/\s]?((((0[13578])|(1[02]))[\-\/\s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[\-\/\s]?(([0-2][0-9])|(30)))|(02[\-\/\s]?[0-2][0-9]))$
说明: 验证 yyyy-mm-dd、yyyy mm dd 或 yyyy/mm/dd 日期
确保日期在该月的有效范围内 - 不验证闰年的 2 月 29 日,只有那个 2 月可以有 29 天
匹配(已测试):0001-12-31 | 9999 09 30 | 2002/03/03
【讨论】:
为什么这个答案被否决了?它对我来说非常有效 您能否编辑答案并将代码放入代码标签中。 编辑成标签:) 接受 2000-02-29 和 2001-02-29 作为匹配项 但日期可能是 00以上是关于yyyy-mm-dd 的正则表达式日期验证 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
用于验证日期时间格式的正则表达式(MM/DD/YYYY)[重复]