【问题标题】:Php validating 24 hour time formatPHP验证24小时时间格式
【发布时间】:2012-06-15 20:53:41
【问题描述】:

我允许用户从00:00:0023:00:00 中选择一个小时,并且需要检查他们是否提交了正确的格式。是否有验证 24 小时格式的正则表达式或 php 函数,例如HH:MM:SS?

我找到了一些正则表达式示例,但我验证的 24 小时时间始终设置为 00 的分钟和秒。只有小时不同。

例如

18:00:00, 23:00:00, 01:00:00

【问题讨论】:

  • 用户可以更改他们所做的选择吗?例如,输入“25:00:00”或“香蕉”?
  • sachleen 的答案是您所要求的,但如果您的真正问题是为用户提供输入 00 到 23 之间数字的方法,请考虑使用下拉菜单。
  • @Zuul 当然可以,他们正在从下拉列表中选择时间
  • 无论用户界面如何,数据验证始终是一个真正的问题。
  • @Matthew,同意,只是想找出用户“挑选”的方法!看看问题是否在验证过程中说明!

标签: php date time


【解决方案1】:

这匹配 24 小时时间,包括秒数

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

如果你只想要 00 表示分钟和秒,那么

([01]?[0-9]|2[0-3]):00:00

【讨论】:

  • 我忘了问..以下分隔符对于正则表达式 2 是否正确? /^([01]?[0-9]|2[0-3]):00:00$/
  • ^ 表示字符串的开头,$ 表示字符串的结尾。因此,有了其中的那些,时间周围就没有任何东西了。所以是的,这不仅行得通,而且是正确的做法。
  • 太棒了!感谢您的友好确认:)
【解决方案2】:

这是一个可以使用的最终样本。

$myTime = '23:00:00';

$time = preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $myTime);

if ( $time == 1 )
{
  // make a error!
}
else
{
  // make a error!
}

【讨论】:

    【解决方案3】:

    试试这个

    $time="23:00:00";
    
    preg_match('#^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$#', $time);
    

    【讨论】:

    • 像魅力一样工作! (拯救了我的一天)。
    【解决方案4】:

    通过这个函数检查,你可以在Laravel global helper functions file的CodeIgniter helper文件中添加这个函数并多次调用

    <?php
    if(!function_exists("check_24_timeFormat")) {
        /**
         *
         * This for check time is in  24 time format  
         * 
         * @param string $time  [ $time => time in 24 hours format like 23:00:00 ]
         * @author Arafat Thabet <arafat.733011506@gmail.com> 
         * @return bool
         */
        function check_24_timeFormat($time){
            if (preg_match("#((0([0-9])|(1[0-9]{1})|(2[0-4])):([0-5])([0-9]):([0-5])([0-9]))#", $time)) {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    

    【讨论】:

      【解决方案5】:

      必须是正则表达式吗?您可以轻松地使用 PHPs strtotime-function 来验证日期和时间(在没有日期的情况下也可以工作)。 如果给定的时间无效,strtotime 返回false(PHP 5.1 之前的-1)。因此不要忘记使用=== 操作数!

      if (strtotime("12:13") === false) { echo("Wrong Time!"); } // Echos nothing
      if (strtotime("19:45") === false) { echo("Wrong Time!"); } // Echos nothing
      if (strtotime("17:62") === false) { echo("Wrong Time!"); } // Echos 'Wrong Time!'
      

      【讨论】:

      • 这是一个非常糟糕的答案。与 strtotime() 一样方便的是它不能满足问题的要求。它允许日期和各种表达式。用户确实需要正则表达式。
      【解决方案6】:

      这对我来说就像一个魅力。

      $time = "23:59:60";    
      preg_match("/^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $time)
      

      【讨论】:

        【解决方案7】:

        虽然选择的答案绝对没问题,但我不喜欢强加格式。我的想法是,如果您可以解释数据,那么格式并不重要。当然,格式越输,你做出的假设越多,你承担的风险就越大。但提供确认屏幕通常可以修正假设。所以,我写道:

        /* Sample usage:
         *  echo '<ol>',
         *       '<li>validateTime ("13:23") = ',       (validateTime ('13:23')     ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("03:23 ") = ',      (validateTime ('03:23 ')    ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("03:23 Am") = ',    (validateTime ('03:23 aM')  ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("03:23Am") = ',     (validateTime ('03:23aM')   ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("03:23 pM") = ',    (validateTime ('03:23 pM')  ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("323") = ',         (validateTime ('323')       ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("058") = ',         (validateTime ('058')       ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("1323pm") = ',      (validateTime ('1323pm')    ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("1323am") = ',      (validateTime ('1323am')    ? 'TRUE' : 'FALSE'), '</li>',   // TRUE - I think this one makes sense, but I'm not sure. 13th hour of the day, starting in the AM?
         *       '<li>validateTime ("323pm") = ',       (validateTime ('323pm')     ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("3") = ',           (validateTime ('3')         ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("3PM") = ',         (validateTime ('3PM')       ? 'TRUE' : 'FALSE'), '</li>',   // TRUE
         *       '<li>validateTime ("13:73") = ',       (validateTime ('13:73')     ? 'TRUE' : 'FALSE'), '</li>',   // FALSE
         *       '<li>validateTime ("25:23") = ',       (validateTime ('25:23')     ? 'TRUE' : 'FALSE'), '</li>',   // FALSE
         *       '<li>validateTime ("Any crap") = ',    (validateTime ('Any crap')  ? 'TRUE' : 'FALSE'), '</li>',   // FALSE
         *       '</ol>';
         */
        function validateTime ($testTime)
        {
            define ('regExpPattern', '/^([01]?[0-9]|2[0-3])([:]?[0-5][0-9])?[ ]?([apAP][mM])?$/');
        
        /*      regExpPattern explanation
                    /^          # String must begin with.
                    (           # Start group.
                    [01]        # A 0 or 1.
                    ?           # Optionally.
                    [0-9]       # 0 through 9.
                    |           # Or.
                    2           # 2.
                    [0-3]       # 0 through 3.
                    )           # End of group. This group will match hour in a 24 hour clock.
                    (           # New group.
                    [:]?        # Optional colon.
                    [0-5][0-9]  # Minutes, 00 through 59.
                    )           # End of group.
                    ?           # Make previous group optional.
                    [ ]?        # Optional space.
                    (           # New group.
                    [apAP]      # One of the following 'apAP'.
                    [mM]        # One of the following 'mM'.
                    )           # End of group.
                    ?           # Make previous group optional. This allows for things like 3 o'clock.
                    $/          # Must end with. */
        
            return preg_match (regExpPattern, trim ($testTime));
        }   // function validateTime ($testDate)
        

        如果您发现改进或错误,请告诉我。

        我应该接受其他分隔符吗?如果有人选择进入 13.45 怎么办?那应该是有效时间吗?毕竟,我确实知道用户的意思。

        现在下一步是获取所有可能格式的用户输入并使其对 SQL 友好。

        享受,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 2012-06-04
          • 1970-01-01
          • 1970-01-01
          • 2021-11-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多