yyyy-mm-dd的正则表达式日期验证

Rom*_*era 32 java regex validation android date

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

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

Vin*_*nod 82

这将匹配yyyy-mm-dd并且还yyyy-m-d:

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

正则表达式可视化

如果您正在寻找完全匹配,yyyy-mm-dd那么试试这个

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

如果你需要在字符串中找到一个日期,请使用这个 The date is 2017-11-30

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

https://regex101.com/r/acvpss/1

  • @AllanXu它来自名为debuggex的站点 (6认同)
  • @Djack你在说什么?如果要在其上强制实际日期,则不使用正则表达式.解析日期并确保它以您正在使用的任何语言实际有效.这只是确保它的数字,用连字符分隔,并且有一天可行(少于32) (6认同)
  • 你是如何制作图表的? (4认同)
  • 不完整的!正则表达式也匹配2016-02-31而它不应该:( (4认同)
  • @AlanH 您可以使用 `/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) $/`。这样,如果缺少前导零,则正则表达式将返回 false。 (2认同)

wum*_*mpz 20

一个简单的就是

\d{4}-\d{2}-\d{2}
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

Debuggex演示

但这不会将月份限制为1-12,将日期限制为1至31.

在其他答案中有更复杂的检查,顺便说一下非常聪明的检查.然而,您必须检查有效日期,因为没有检查是否有一个月有28天,30天或31天.

  • 赞成票是为了补偿反对票,因为这是唯一真正承认其局限性的答案。例如,得票较高的答案不会使 2 月 31 日失效。使用正则表达式捕获文本字段并使用其他健全性检查进行验证。 (3认同)
  • 哇。将近4年后的第一次投票。这不值得再加上一个徽章吗?;) (2认同)
  • 为什么明显错误?正则表达式和规定的限制是正确的。我想念什么? (2认同)
  • 这不是问题的真正答案,因为它不验证日期,只是验证“4 位数字,后跟破折号,后跟 2 位数字,后跟破折号,后跟 2 位数字”。就像说2+2是3但你需要加1一样,这是误导。 (2认同)
  • 仅将此评论添加到此答案中也是一种误导。从这个意义上说,其他答案也是不正确的,因为它们也无法完整地验证它。但如果您愿意,我会将其称为评论或大评论。 (2认同)

zai*_*ini 8

你可以测试这个表达式:

^\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]))$
Run Code Online (Sandbox Code Playgroud)

说明:
验证 yyyy-mm-dd、yyyy mm dd 或 yyyy/mm/dd 日期

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

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


Ham*_*atu 6

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

((?:19|20)\\d\\d)-(0?[1-9]|1[012])-([12][0-9]|3[01]|0?[1-9])
Run Code Online (Sandbox Code Playgroud)

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