验证这种格式 - "HH:MM"

Cat*_*ish 25 php regex preg-match

我正在尝试用来preg_match验证时间输入是否采用这种格式 - "HH:MM"

Cha*_*les 72

您可以使用正则表达式来检查它.

12小时:

preg_match("/^(?:1[012]|0[0-9]):[0-5][0-9]$/", $foo)
Run Code Online (Sandbox Code Playgroud)

24小时:

preg_match("/^(?:2[0-3]|[01][0-9]):[0-5][0-9]$/", $foo)
Run Code Online (Sandbox Code Playgroud)

如果您使用从01:0024:59的24小时制时钟,请使用

preg_match("/^(?:2[0-4]|[01][1-9]|10):([0-5][0-9])$/", $foo)
Run Code Online (Sandbox Code Playgroud)

  • 对不起,但是真的吗?读这个没有评论是呸.为什么不使用这样简单的东西:`$ dateObj = DateTime :: createFromFormat('dmY H:i',"10.10.2010".$ timeStr); if($ dateObj!== false){//有效时间}否则{//无效时间}`但是,给予+14 upvotes重新发明轮子 (12认同)
  • 根据这个24:59是一个有效的小时 (4认同)
  • @Toskan:我认为这是一个很好的方法。我试图按照 OP 的要求使用 `preg_match`,即使我不知道它背后的原因。我知道我以前问过问题,有人告诉我不应该做我要求做的事情(而不是告诉我怎么做),这让我很困扰——当然我有理由问为了我想要的。我不知道这张海报的推理是什么:也许他们正在使用 GeSHi 用他们的语言来格式化日期,所以 `DateTime::createFromFormat` 不可用。或者也许他们只是在学习正则表达式。我不知道。 (3认同)
  • @themis 第三个正则表达式故意允许这样做。前两个故意禁止这样做。 (2认同)

T30*_*T30 13

简单的函数,可以在不抛出异常的情况下验证日期(和/或时间).只需传递您期望的格式:

function isValidDate($date, $format = 'Y-m-d') {
    $dateObj = DateTime::createFromFormat($format, $date);
    return $dateObj && $dateObj->format($format) == $date;
}
Run Code Online (Sandbox Code Playgroud)

DateTime参数很重要:它用于将输入$format转换为DateTime对象,然后将其转换$format为a DateTime以与输入对象进行比较.

一些用法示例:

/* Valid Examples: */
isValidDate("2017-05-31");
isValidDate("23:15:00", 'H:i:s');
isValidDate("2017-05-31 11:15:00", 'Y-m-d h:i:s');

/* Invalid: */
isValidDate("2012-00-21");
isValidDate("25:15:00", 'H:i:s');
isValidDate("Any string that's not a valid date/time");
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的一个。我不明白为什么其他人在有官方 DateTime 类的情况下使用正则表达式。你知道为什么?其他一些人花了时间,当一个类是为一种语言提供的官方类时,通常它已经被测试了很多次,而且它肯定是通用的,并且考虑到国际问题。特别是当您处理日期和时间时。这些人工作很长时间,消耗人力和电能。不要浪费两者,这是优秀开发人员的基础;)我知道,这是一个沉重的负担,但这是对的 (2认同)

Tos*_*kan 12

让我们假设您要检查的时间是$timeStr,并且必须是H:i根据日期规格的格式.使用正则表达式是恕我直言愚蠢.这更容易阅读:

更新

$timeStr = " 02:00"; //example of valid time, note whitespace
test($timeStr);
$timeStr = "23:59"; //valid
test($timeStr);
$timeStr = "24:00"; //invalid
test($timeStr);
$timeStr = "25:00"; //invalid
test($timeStr);    
$timeStr = "16:61"; // invalid
test($timeStr);

//tests 23:59 hour format
    function test($timeStr){

    $dateObj = DateTime::createFromFormat('d.m.Y H:i', "10.10.2010 " . $timeStr);

    if ($dateObj !== false && $dateObj && $dateObj->format('G') == 
        intval($timeStr)){
        //return true;
        echo 'valid  <br/>';
    }
    else{
      //return false;
      echo 'invalid <br/>';
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,25:00是有效时间. (8认同)
  • 第二天凌晨1点,它的功能 (2认同)

TIL*_*BRA 8

根据所需的格式验证小时、分钟和秒的函数:

function validTime($time, $format='H:i:s') {
    $d = DateTime::createFromFormat("Y-m-d $format", "2017-12-01 $time");
    return $d && $d->format($format) == $time;
}
Run Code Online (Sandbox Code Playgroud)

如何使用:

$valid = validTime("23","H");
$valid = validTime("23:59","H:i");
$valid = validTime("23:59:59","H:i:s");
$valid = validTime("23:59:59");
Run Code Online (Sandbox Code Playgroud)

有效=真

$valid = validTime("25","H");
$valid = validTime("01:60","H:i");
$valid = validTime("01:20:61","H:i:s");
$valid = validTime("01:20:61");
Run Code Online (Sandbox Code Playgroud)

有效 = 假