【问题标题】:I need a regular expression to handle multiple date formats [closed]我需要一个正则表达式来处理多种日期格式[关闭]
【发布时间】:2013-09-27 13:46:55
【问题描述】:

我需要一个可以处理这些日期格式的正则表达式:

  • 2010-1-1
  • 2010-6-01
  • 2010-06-1
  • 10-10-2010
  • 10/10/2010
  • 2010/10/10

这可能吗?或者我最好为每种格式创建多个正则表达式?

【问题讨论】:

  • 允许所有这些事情可能不会有很大的限制,或者真的很长/很复杂。有一些更容易处理的限制性问题可能会更好,然后再处理一个巨大的复杂问题。
  • 我认为您可以将其拆分为 2 或 3 个正则表达式。前 3 个应该很容易组合,就像第 4 个和第 5 个示例一样。
  • 真的需要正则表达式,还是使用已经提供强大日期解析的语言?

标签: regex date-format date-formatting


【解决方案1】:

您可以使用管道 (\|) 来组合正则表达式,因此只要您可以为其中的每一个编写一个正则表达式,您就可以将它们全部粘贴在一起,例如这应该匹配前两个日期:"\([12][0-9][0-9][0-9]-[1-9]-[1-9]\|[12][0- 9][0-9][0-9]-[0-9]-0[1-9]\)" (您尚未明确指定格式,因此这可能需要针对您的实际问题进行概括。 )

但是,您可能需要考虑一些更大的问题。

10-11-2010 究竟是什么意思?是 10 月 11 日还是 11 月 10 日?

您是否只假设有效日期? 2010-1-32 你打算怎么做? 2010-2-29呢?

【讨论】:

    【解决方案2】:

    你最好对|使用不同的格式验证器,比如:

    /\b[\d]{4}-[\d]-[\d]\b
    |
    \b[\d]{4}-[\d]{1,2}-[\d]{1,2}\b
    |
    \b[\d]{2}-[\d]{2}-[\d]{4}\b
    |
    \b[\d]{2}\/[\d]{2}\/[\d]{4}\b
    |
    \b[\d]{4}\/[\d]{2}\/[\d]{2}\b/x
    

    但请注意,验证日期和发现它发生不是同一个问题。您的所有日期都是以standard strtotime 表示的有效日期 - 因此您可以使用该事实来验证(而不是搜索)您的日期。

    【讨论】:

      【解决方案3】:

      试试\d{2,4}[-/]\d{1,2}[-/]\d{1,4}http://regexr.com?36goq - 看看实际情况

      【讨论】:

      • 这将匹配,例如,00/0-0
      猜你喜欢
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2012-07-15
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多