【问题标题】:Regex to match date formats DD-MM-YYYY and DD/MM/YYYY正则表达式匹配日期格式 DD-MM-YYYY 和 DD/MM/YYYY
【发布时间】:2017-07-10 09:46:22
【问题描述】:

我在 Sublime Text 3 中使用一个大型文本文件,其中的条目由行分隔。我正在寻找一个正则表达式,它将:

  • 匹配以DD-MM-YYYY 格式显示的条目
  • 匹配以DD/MM/YYYY 格式显示的条目

如果两者都太复杂,那么只需第一个示例即可。

我没有为这样的正则表达式做任何工作,因为它老实说远远超出了我的知识范围,我不知道从哪里开始,并且查看处理日期格式的正则表达式验证的类似答案证实了这些怀疑对我来说。

提前感谢您的帮助。

【问题讨论】:

    标签: regex validation date sublimetext3


    【解决方案1】:

    此模式适用于您的条件。严格不允许当月至今,反之亦然。

    ^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$
    

    此模式将匹配以下格式:(日期、月份、年份)

    25.04.2017  
    02.04.2017  
    2.4.2017  
    
    25/04/2017  
    5/12/2017  
    15/2/2017  
    
    25-04-2017  
    6-10-2017  
    16-5-2017  
    

    【讨论】:

    • 这是另一个问题的好答案,但不是这个问题的真正答案。
    • 当心。这也将匹配诸如 25/04.2017 和 25.04-2017 之类的字符串
    【解决方案2】:

    这个正则表达式匹配你的例子:

    [0-9]{2}[-|\/]{1}[0-9]{2}[-|\/]{1}[0-9]{4}
    

    但是如果你写错了日期(比如 2 月 31 日),这个正则表达式匹配它。

    【讨论】:

    • 这不也接受dd-mm/yyyydd/mm-yyyy吗?如果是这样,即使它可能足够好,它也没有按照问题的要求做,也没有提及这个事实,因此很可能会误导读者。
    • 没有月份限制,它需要超过日期和月份值。它允许 35/31/2007 是一个有效日期,查看我的答案,它可以解决月份和日期范围验证问题[但 Feb31、Apr31、June31、Sep31、Nov31 无效日期仍未解决]。
    【解决方案3】:

    检查这个:

    ([0-2][0-9]|(3)[0-1])[-|\/](((0)[0-9])|((1)[0-2]))[-|\/]\d{4}
    

    我认为这与您的答案完美匹配。最多需要 31 天,最多 12 个月。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多