这个12小时的正则表达式出了什么问题?

时间:2015-11-05 16:46:40

标签: php regex

获得一个以下列格式输入时间的表单:HH:MM am / pm。小时总是零填充(或至少应该是)。收到此错误:

警告:preg_match_all():未知的修饰符':'在(文件名在这里)

public static function timeToInt( $time )
{
    $pattern = "(?<hour>[0-9]{2}):(?<minutes>[0-9]{2}) (?<xm>[am|pm]{2})";
    $matches = [];

    if( preg_match_all( $pattern , $time , $matches ) )
    {
        $hour = $matches['hour'];
        $xm = $matches['xm'];

        if( $hour != 12 && $xm == "pm" )
        {
            $hour += 12;
        }

        if( $hour == 12 && $xm == "am" )
        {
            $hour = 0;
        }

        return ( $hour * 100 ) + $minutes;
    }

    return null;
}

1 个答案:

答案 0 :(得分:0)

您需要将正则表达式包装在/#“分隔符”或类似内容中。

因为你没有指定任何这样的“分隔符”,pcre假定你使用大括号(...)作为分隔符,并且第一个右大括号关闭了正则表达式。

结束分隔符之后的任何内容都被视为switch,如果正则表达式(例如i使其不区分大小写)和:在您第一次关闭后立即更改行为大括号不是有效的开关,因此你得到的错误信息。

PHP Docs