使用preg_match验证时间格式

She*_*ose 1 php regex preg-match

我想验证时间输入(如上午10:30,下午02:30)使用 preg_match()

我用这个,

 $pattern   =   "/([1-12]):([0-5])([0-9])( )(am|pm|AM|PM)/";
 if(preg_match($pattern,$time)){
   return true;
 }
Run Code Online (Sandbox Code Playgroud)

但是当我提供类似的输入时10:30 pmxxxx,它将无法验证.我不知道方法是否正确.请帮忙.

Gla*_*vić 7

日期解决方案

您可以使用DateTime :: createFromFormat验证所有日期/时间字符串:

功能

function isTimeValid($time) {
    return is_object(DateTime::createFromFormat('h:i a', $time));
}
Run Code Online (Sandbox Code Playgroud)

foreach (['12:30 am', '13:30 am', '00:00 pm', '00:00 am', '12:30am', '15:50pm'] as $time) {
    echo "Time '$time' is " . (isTimeValid($time) ? "" : "not ") . "valid.\n";
}
Run Code Online (Sandbox Code Playgroud)

示例输出

Time '12:30 am' is valid.
Time '13:30 am' is not valid.
Time '00:00 pm' is valid.
Time '00:00 am' is valid.
Time '12:30am' is valid.
Time '15:50pm' is not valid.
Run Code Online (Sandbox Code Playgroud)