【问题标题】:regex for various date formats各种日期格式的正则表达式
【发布时间】:2012-07-15 23:57:46
【问题描述】:

我是 Regex 的新手,我想知道是否有人可以提供帮助。我什至不确定 Regex 是否是我想做的最佳选择。

我正在查看一个字符串数组。我想在数组中找到与各种日期格式匹配的所有项目。以下是我尝试匹配的示例格式。

2012 年 4 月 1 日 - 当天没有前导零的短月份名称 - 匹配

2012 年 4 月 1 日 - 日期前导零的短月份名称 - 匹配

2012 年 4 月 1 日 - 当天没有前导零的完整文本月份名称 - 匹配

2012 年 4 月 1 日 - 日期前导零的完整文本月份名称 - 匹配

2012 年 4 月 1 日 - 月份和日期没有前导零 - 匹配

04/01/2012 - 月份和日期的前导零 - 匹配

02/29/2012 - 如果年份是闰年,则允许 2/29 - 匹配

2001 年 13 月 12 日 - 1-12 月之外的月份 - 不匹配

2012 年 2 月 30 日 - 一个月中有太多天 - 不匹配

02/29/2011 - 如果不是闰年 - 不匹配

我开发的当前正则表达式。

\b(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May?|Jun(?:e)?|Jul(?:y) |Aug(?:ust)?|Sep(?:t(?:ember)?)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?))|(0?[1-9]|1[012])[- /.,](0?[1-9]|1[0-9]|2[0-9]|3[01])

我可以开发正则表达式来对每种格式的各个部分进行解密,但是将它们链接在一起是这样我只能得到一个匹配项。目前它匹配两次(月,月+日)。我只希望它在整个匹配时匹配。

谢谢

有限

【问题讨论】:

  • 试试DateJS
  • 使用RegEx 你可能会匹配一些日期字符串,但你永远不能使用pure regex pattern 来验证日期字段。您可能会赢得几场战斗而不是一场战争!假设leap year issue

标签: regex validation date


【解决方案1】:

为什么要在一个简单的正则表达式中完成所有操作?这听起来更复杂,它应该是。此外,例如,是否考虑在未来添加新格式?这不会是直截了当的。我宁愿将类似的模式分组到一个正则表达式中,例如“2012 年 4 月 1 日”、“2012 年 4 月 1 日”在一组中,然后是“04/01/2012”、“02/30/2012”。无论如何,我想在某些时候,您需要将日期的不同组成部分处理成一个共同的表示。为此,您可能需要专用代码。

这也许不是您想要的答案,但作为一般原则,请始终尝试将大问题分解为您可以轻松解决的小问题。

干杯,

何塞

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2016-11-28
    • 2019-10-15
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多