本问题已经有最佳答案,请猛点这里访问。

日期格式yyyy-mm-dd的正则表达式是什么?

我想验证来自edittext的电子邮件,并检查它是否与正则表达式匹配。

也可以在"相关"部分的右侧查看,在很多情况下,都需要使用RegEx字符串进行日期验证。

检查此答案可能有帮助stackoverflow/a/2149698/2675669

这将匹配yyyy-mm-dd以及yyyy-m-d:

^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$

如果您正在寻找yyyy-mm-dd的完全匹配项,请尝试以下操作

^\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$

或者如果您需要在类似The date is 2017-11-30的字符串中查找日期,请使用此日期

\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*

https://regex101/r/acvpss/1

您是如何产生图形的?

@AllanXu来自名为debuggex的网站

不完整!正则表达式也应该匹配2016-02-31,但不应该:(

@Djack你在说什么?如果要在其上强制使用实际日期,则不能使用正则表达式。解析日期,并确保其实际有效,无论您使用哪种语言。这只是确保其数字以连字符分隔,并且是可行的一天(少于32天)

@Vinod的正则表达式允许9(没有前面的0)匹配为true。这是故意的吗?

@AlanH您可以使用^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$。这样,如果缺少前导零,则正则表达式将返回false。

但它也接受2017-02-31

它也匹配2017-0210-31

这不能很好地工作,它接受yyyy-m-d,没有严格执行yyyy-mm-dd

它匹配" 1984-9-35"的" 1984-9-3"部分。

一个简单的是

\d{4}-\d{2}-\d{2}

Debuggex演示

但这并不将月份限制为1到12,将日期限制为1到31。

像其他答案一样,还有更复杂的检查,非常聪明。但是,您必须检查一个有效的日期,因为不会检查一个月是否有28、30或31天。

哇。将近4年后的第一次投票。这不值得再加上一个徽章吗? ;)

是的,它仍然应该被否决。这个答案是完全错误的,因为它不是用于日期验证的正则表达式。

为什么明明是错误的?正则表达式和规定的限制是正确的。我想念什么?

它不是问题的真正答案,因为它不验证日期,仅验证" 4位数字后接破折号,然后是2位数字,然后是破折号再加上2位数字"。就像说2 + 2是3,但您需要添加1。

仅将此注释添加到此答案也是误导性的。从这个意义上讲,其他答案也是不正确的,因为它们也不完整,无法对其进行验证。但是,如果您愿意,我可以称其为评论或大型评论。

它的选票太多,尤其是它的事实。

您可以使用此正则表达式获取yyyy-MM-dd格式:

((?? 19 | 20) d d)-(0?[1-9] | 1 [012])-([12] [0-9] | 3 [01] | 0?[1-9 ])

您可以找到日期验证的示例:如何使用正则表达式验证日期。

他想要yyyy-mm-dd。

我已经更新了答案。

您可以测试此表达式:

^\d{4}[\-\/\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日期

确保日期在该月的有效范围内-不验证a年2月29日,只有2月可以有29天

匹配项(经过测试):0001-12-31 | 9999 09 30 | 2002/03/03

为什么这个答案被否决?对我来说效果很好

您可以编辑答案并将代码放入代码标签中吗?

编辑成标签:)

这同时接受2000-02-29和2001-02-29作为匹配项

更多推荐

java yyyy-mm-dd正则表达式_关于Java:yyyy-mm-dd的正则表达式日期验证