【问题标题】:Regular expression for timestamp时间戳的正则表达式
【发布时间】:2018-01-24 00:25:00
【问题描述】:

我正在验证时间戳。这是我的代码。

它不应该接受像 "16:59'99" 或 "16:59'999" 这样的字符串,因为 ' 后面的 2 位数字应该小于 59,但它实际上接受了那些无效的格式。我的正则表达式有什么问题?

function isValidTimeStampFormat($timestamp){

$pattern = "(^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]'[0-5][0-9].[0-9]{1,3}$)|
            (^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]'[0-5][0-9]$)|
            (^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9].[0-9]{1,3}$)|
            (^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]$)";

return (preg_match("<$pattern>", $timestamp) == 1)? true : false;
}

【问题讨论】:

标签: php regex validation


【解决方案1】:

第一行和第三行中的. 表示匹配任何内容,不匹配点,因此请改用\. 来匹配文字点。

$pattern = "(^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]'[0-5][0-9]\.[0-9]{1,3}$)|
            (^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]'[0-5][0-9]$)|
            (^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]\.[0-9]{1,3}$)|
            (^(2[0-3]|[0-1]{0,1}[0-9]):[0-5][0-9]$)";

那里只有一个点,' 被匹配。

请参阅online demo here

【讨论】:

    【解决方案2】:

    你为什么不试试这个:

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

    Regxr上查看这个

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多