【问题标题】:Regex to check for date and time正则表达式检查日期和时间
【发布时间】:2012-07-20 14:37:08
【问题描述】:

如何编写一个正则表达式来检查给定格式是否只有日期/只有时间或两者都有以下格式“DD-MM-YYYY HH:MM AM”或“DD-MM-YYYY HH:MM”

我不知道如何做到这一点。

【问题讨论】:

  • 你从来没有回答过我上一篇文章中的问题:为什么你要为此使用正则表达式吗?
  • 我敢肯定会有一千个答案告诉你使用 '^\d{2}...' 但这是一种注定失败的方法。您将如何防止像下午 55:98 这样的愚蠢输入,或验证这一天在给定月份内是否有效?您将如何应对闰年等极端情况?只需使用日期库即可省去麻烦。
  • 您今天已经问了 3 次基本相同的问题,但我没有看到太多证据表明您使用了社区已经提供的信息。因此,我投反对票。你必须和我们一起工作。 “这是要求”不是一个很好的解释。这是一个家庭作业问题,您需要使用正则表达式来证明对工具的掌握吗?如果是这样,请将您的问题标记为作业。

标签: java regex


【解决方案1】:

使用这个正则表达式\d{2}-\d{2}-\d{4}\s\d{2}:\d{2}(\s(A|P)M)?

【讨论】:

  • 如果我输入 45 作为天怎么办?如果我在只有 30 天的月份中输入 31 怎么办?如果我在非闰年输入 29/02 怎么办?这种方法的问题是无穷无尽的......
  • 如果您之后必须调用 DateTime.TryParse 来确定它是否是有效日期,那么使用正则表达式有什么意义?
【解决方案2】:

查看https://stackoverflow.com/a/11579461/872803并管理"dd-MM-yyy hh:mm"

if (myString.endsWith("AM") {
    // use "dd-MM-yyy hh:mm"
} else {
   // use "dd-MM-yyy HH:mm"
}

【讨论】:

    【解决方案3】:
    ^((0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-\d{4} (20|21|22|23|[01]\d|\d)(([:][0-5]\d){1,2})( (AM|PM))?)$
    

    你让我在闰年。

    【讨论】:

      【解决方案4】:

      这样的?未经测试。

      \b(\d{1,2}\-\d{1,2}-\d{4} \d{1,2}\:\d{1,2}( (AM|PM))?)\b
      

      【讨论】:

      • 除了这个匹配废话像 59-36-0000 43:54AM
      • 我知道。但是,如果目标是在文本中查找日期,这将是可行的……我在现实生活中从未见过这样的事情。如果是作业,他们可能会像这样测试它的输入是...
      • 一个公平的观点。虽然如果这是用于从非结构化文本中提取类似日期的子字符串,我建议使用 \b 而不是 ^$
      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 2021-09-09
      • 2011-08-13
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多