首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于匹配不同格式的有效日期的正则表达式

用于匹配不同格式的有效日期的正则表达式
EN

Stack Overflow用户
提问于 2019-06-20 16:22:03
回答 1查看 74关注 0票数 0

我正在尝试编写一个验证日期的正则表达式。regex需要匹配以下格式

  • MM-DD-YYYY
  • 毫米/年/年
  • DD-MM-YYYY
  • 日/月/年
  • YYYY MM-DD
  • YYYY/MM/DD
  • YYYY DD-MM
  • YYYY/DD/MM

并且不应该匹配像DD-MM/YYYY这样的格式。

我试过这个Regex

代码语言:javascript
复制
'^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$'

但我只能提取mm/dd/yyyy或mm.dd.yyyy或mm.dd.yyyy格式的日期。

我还尝试使用这个(?:\d{2}){1,2}-/\d{2}-\d{2}-\\d{2}--在其中我得到日期,但我也得到了诸如5542-21-54、99/01/2019等不代表日期的值。

谢谢大家的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-06-21 00:07:30

如果您想要匹配日期,您需要执行此正则表达式:

代码语言:javascript
复制
((1|2)[0-9]|3[0-1]|0?[1-9])

在你需要的月份:

代码语言:javascript
复制
(0?[1-9]|1[0-2])

对于您需要的年份(只有1900和2000,对于3000您可能需要更新您的脚本时,我们将在2999年到达):

代码语言:javascript
复制
((19|20)?[0-9]{2})

在您有不同的分隔符和日期顺序之后,所以:

代码语言:javascript
复制
((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])\/((19|20)?[0-9]{2}) # for DD/MM/YYYY
((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2])\-((19|20)?[0-9]{2}) # for DD-MM-YYYY
((19|20)?[0-9]{2})\/((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2]) # for YYYY/DD/MM
((19|20)?[0-9]{2})\-((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2]) # for YYYY-DD-MM
...

最后,您需要将它们组合起来,并与(expression1|expression2|...)进行一次匹配。

代码语言:javascript
复制
\W(((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])\/((19|20)?[0-9]{2})|((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2])\-((19|20)?[0-9]{2})|((19|20)?[0-9]{2})\/((1|2)[0-9]|3[0-1]|0?[1-9])\/(0?[1-9]|1[0-2])|((19|20)?[0-9]{2})\-((1|2)[0-9]|3[0-1]|0?[1-9])\-(0?[1-9]|1[0-2]))\W

我需要\W在开始和结束的正则表达式。这一次检查是否有任何东西(\s,\;,\,等等)。

演示

你需要完成缺失的组合。

享受;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56690226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档