【问题标题】:Regex for time in hh:mm am/pm format以 hh:mm am/pm 格式表示时间的正则表达式
【发布时间】:2015-11-24 23:46:06
【问题描述】:

我需要对学校项目的输入进行严格验证,时间格式为 HH:MM am/pm。到目前为止,我已经有了这个 RegEx 表达式:

(([01]?[0-9]):([0-5][0-9]) ([AaPp][Mm]))

这是一个工作演示:http://regexr.com/3c9b5

唯一的问题是它接受 13:00 到 19:59 的时间

什么是正确的正则表达式? RegEx 对我来说一直很难

【问题讨论】:

  • 您必须使用正则表达式来根据作业条款进行验证吗?
  • 必须是字符串,有没有更好的验证字符串的方法?
  • 使用内置字符串解析的库。它会接受这种格式以及除此之外的许多其他格式,而且您不会承担每个人不可避免地犯的所有错误:时间。
  • aMAm 怎么样——它们都有效吗?
  • \b((1[0-2]|0?[1-9]):([0-5][0-9])\s?([AaPp][Mm])) 在时间和子午线之间的可选空间怎么样?

标签: regex


【解决方案1】:

你可以使用:

\b((1[0-2]|0?[1-9]):([0-5][0-9]) ([AaPp][Mm]))
EDIT:         ^ changed this from "0" to "1" to not accept 00:00

【讨论】:

  • 但它接受 00:00 pmthere's no such time... 上午 11:59 到下午 12:00。晚上 11:59 到凌晨 12:00。
  • 可以改的,不错
【解决方案2】:

你可以用这个:

^([1-9]|0[1-9]|1[0-2]):[0-5][0-9] ([AaPp][Mm])$

它将接受上午 1:00、上午 01:00、下午 12:00、下午 11:00、下午 12:59。但不接受上午 00:00 或下午 00:00 或上午 01:60。

【讨论】:

  • 欢迎来到 SO。 ...将接受“aM”和“pM”。如果它不应该用作最后一组 ([AP][Mm]|[ap]m).
【解决方案3】:
  ([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])\s*([AaPp][Mm])

以下:

上午 10:00

晚上 10:00

上午 10:00

晚上 10:00

晚上 10:00

上午 10:00

晚上 10:30

23:46 上午

【讨论】:

    【解决方案4】:

    这个正则表达式有 3 个部分,由 OR 运算符分隔。
    每个部分都允许一种类型的 HH
    它们是 0[1-9]、[1-9] 和 1[0-2]。

    /(0[1-9]:[0-5][0-9]((\ ){0,1})((AM)|(PM)|(am)|(pm)))|([1-9]:[0-5][0-9]((\ ){0,1})((AM)|(PM)|(am)|(pm)))|(1[0-2]:[0-5][0-9]((\ ){0,1})((AM)|(PM)|(am)|(pm)))/
    

    【讨论】:

    • 虽然这可能会回答问题,但不鼓励仅使用代码的答案。而是解释原始代码的问题以及您为解决它所做的工作。
    • 谢谢,@miken32,我没有在堆栈上发布太多内容。除了包含此信息的发布前页面之外,是否有相关指南。
    • 只需浏览帮助部分,其中包含大量信息。 (此时 Meta Stack Overflow 中的信息可能比您需要的更多!)关于这个答案,我支持您只是因为您回来编辑。但它确实需要在木棚后面痛击 DRY(不要重复自己)的概念。
    【解决方案5】:

    我使用了这个正则表达式

    ([0-9]{2})\\/([0-9]{2})\\/([0-9]{4}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) (am|pm)
    

    你可以试试这个。希望这会有所帮助!

    【讨论】:

      【解决方案6】:
        String regex = "([01]?[0-9]|2[0-3]):[0-5][0-9]";
        
      

      这将适用于 24 小时验证

      【讨论】:

        猜你喜欢
        • 2012-09-18
        • 2021-02-24
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2021-02-17
        相关资源
        最近更新 更多