【问题标题】:PHP: Time validation RegEx?PHP:时间验证正则表达式?
【发布时间】:2010-10-20 08:50:07
【问题描述】:

我正在使用以下正则表达式在 php 中以 dd/mm/yyyy 格式验证日期:

preg_match("/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/", $e_startdate, $matches)

但是以10:20 PMAM 格式验证时间的正则表达式是什么。我想要一个正则表达式,它将为我验证以下格式。

<number><number><colon><number><number><space><AM or PM>

谢谢

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您可以使用正则表达式:

    (0[0-9]|1[0-2]):[0-5][0-9] [AP]M
    

    【讨论】:

    • 前面的 0 应该是可选的,以接受格式为 1:23 AM' and this would accept '00:00 AM' or '00:49 PM' which are illegal. (0[1-9]|[1-9]|1[0-2]):[0-5][ 的时间0-9] [AP]M`应该适用于那些。
    • 我不明白这部分(0[0-9]|1[0-2]) 是什么意思,如果你能解释一下。谢谢!
    • @Prashant:表示0[0-9]1[0-2]0[0-9] 表示 0 后跟任意数字。而1[0-2] 表示1 后跟0 or 1 or 2
    • 据我所知,这与11:42 AM 之类的内容不匹配,因为1 不允许作为第一位数字。
    • 但是时间也可以是下午 03:35?那么我认为1[0-2] 的第二个条件会失败?
    【解决方案2】:

    以下内容应验证您请求的格式:

    preg_match("/(\d{2}):(\d{2}) (AM|PM)/", $e_startdate, $matches);
    

    请注意,这不一定是有效时间。您可以输入诸如 32:62 AM 之类的内容。你需要这样的东西来验证时间:

    preg_match("/(0?\d|1[0-2]):(0\d|[0-5]\d) (AM|PM)/i", $e_startdate, $matches);
    

    注意匹配整个不区分大小写的内容(就像我在第二个示例中所做的那样)。否则小写的ampm等都不起作用。

    【讨论】:

    • 我只想接受 12 小时格式的时间,所以您的正则表达式 /(0?\d|11|12):(0\d|[0-5]\d) (AM|PM)/i 这只会接受 12 小时格式对吗?
    • @elusive:在将它与 preg_match 匹配后,我将在$matches 变量中得到什么?我需要 HH MM 和 AM|PM 作为 $matches 变量中的单独数组元素?
    • @Prashant:你会得到这样的结果:11:51 AM 结果是array(0 =&gt; '11', 1 =&gt; '51', 2 =&gt; 'AM')
    • 感谢@elusive,这正是我所需要的。 :)
    • @Prashant:不客气!我刚刚纠正了一个小错误(小时部分缺少10)。请务必使用最新版本!
    【解决方案3】:

    正则表达式:

    (([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])
    

    以 MySQL 时间格式验证时间。 24 小时时间冒号分隔时:分:秒 hh:mm:ss

    比赛:09:30:00 | 17:45:20 | 23:59:59

    不匹配:24:00:00

    【讨论】:

    • /([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] / 略微简化
    【解决方案4】:

    /\d{2}:\d{2} (上午|下午)/

    【讨论】:

      【解决方案5】:

      我从难以捉摸的答案开始,但需要更多的灵活性。这使得分钟是可选的,以及上午/下午之前的空间

      /(0?\d|1[0-2])(:(0\d|[0-5]\d))?[ ]?(A|P)M/i
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 2010-09-17
        相关资源
        最近更新 更多