1

我有一个在线表格,其中包含一些时间数据字段。我将这些数据存储到 MySQL 数据库中的一个time字段中,该字段需要一个 format hh:mm:ss。如果用户正确输入了这种格式的时间,那么我想接受数据。我还希望允许用户输入标准美国时间的时间,例如9:30 am11:25 pm10:27 am等。

基本上我想先测试时间是否是正确的数据库格式hh:mm:ss(将其转换为数据库时间格式。如果它不是这两种格式,那么我们会显示一条错误消息并死掉。hh:mm am/pmstrtotime()

有谁知道如何测试变量的值是否与这些时间格式之一匹配?

我想做的伪PHP代码:

<?php
    $value = //some time;
    if (is_database_time($value)){
        // good no problem
    }else if (is_usa_time($value)){
        $value = strtotime($value);
    }else{
        die("error incorrect time format, try again.");
    }
?>

** 编辑 **

感谢大家的帮助。我在这里使用了一些信息来制作一个完美运行的功能:

<?php
    function filter_time($key,$value){
        // this section handles the storage of time data
        if (preg_match('/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/', $value)){
            //do nothing
        }else if (preg_match('/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i', $value)){
            $value = date( 'H:i:s', strtotime($value));
        }else{
            display_error('incorrect time format in '.$key.' field.');
        }
        return $value;
    }
?>
4

3 回答 3

9

函数验证时间格式()

function verify_time_format ($value) {

  $pattern1 = '/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/';
  $pattern2 = '/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i';
  return preg_match ($pattern1, $value) || preg_match ($pattern2, $value);

}

为以下值返回TRUE :

2:03:32
02:03:32
23:59:59
15:23 AM
15:23 am
09:41 pm
9:41 PM
etc...

更新:

function filter_time ($key, $value) {

  $p1 = '/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/';
  $p2 = '/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i';

  if (preg_match ($p1, $value) || preg_match ($p2, $value))
    $res = date ('H:i:s', strtotime ($value));

  else
    display_error ("incorrect time format in {$key} field.");

  return $res;

}
于 2012-03-23T16:03:46.473 回答
3

您已经在使用strtotimefrom PHP,并且对于您指定的值,确实不需要强制使用特定格式。

您可能想要测试和确保的是,该字段仅使用数字、冒号和 am 或 pm 进行验证,如 Wh1T3h4Ck5 答案。

有了它,您的代码可能类似于以下内容

<?php

  function valid_time($value) {//Wh1T3h4Ck5's function
    return preg_match('/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i', $value);
  }

  $value = //some time;
  if (vald_time($value)){
    $time_value = strtotime($value);
    echo $time_value;
  }else{
    die("Error incorrect time format, try again.");
  }
?>

尽管更优雅的解决方案是在提交表单之前考虑使用 Jquery/Javascript。您可以在提交到 PHP 脚本之前测试并警告用户格式不正确。将验证保留在 PHP 脚本中,如果需要,还可以使用其他保护措施。

于 2012-03-23T16:28:46.263 回答
1

您可以使用正则表达式很容易地解决问题。例如:

<?php
  $databaseTimePattern = '/^(0[0-9])|(1[0-2]):[0-5][0-9]:[0-5][0-9]$/'; //Matches times in the form hh:mm:ss
  $usaTimePattern = '/^([1-9]|(1[0-2])):[0-5][0-9] [a|p]m$/'; //Matches times in the form hh:mm am/pm

  $value = //some time;
  if (preg_match($databaseTimePattern, $value)){
    // good no problem
  }else if (preg_match($usaTimePattern, $value)){
    $value = strtotime($value);
  }else{
    die("error incorrect time format, try again.");
  }
?>
于 2012-03-23T16:33:58.150 回答