Что не так с этим 12-часовым регулярным выражением?

1

Получил форму, которая вводит время в следующем формате: HH: MM am/pm. Часы всегда заполняются нулями (или, по крайней мере, должны быть). Получение этой ошибки:

Предупреждение: preg_match_all(): Неизвестный модификатор ':' in (имя файла здесь)

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;
}
  • 2
    Оберните свое регулярное выражение в / или # или аналогичном .... потому что вы не указали такого "разделителя", pcre предполагает, что вы используете скобки (...) в качестве разделителя, и что первая закрывающая скобка закрывается регулярное выражение .... PHP Docs
  • 0
    Это прояснилось, спасибо!
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Вам нужно обернуть ваше регулярное выражение в / или # "разделители" или подобное.

Поскольку вы не указали какой-либо такой "разделитель", pcre предполагает, что вы используете фигурные скобки (...) в качестве разделителя и что первая закрывающая скобка закрывает регулярное выражение.

Все, что связано с закрывающим разделителем, считается switch который изменяет поведение, если регулярное выражение, например, i чтобы сделать его нечувствительным к регистру, и : сразу после вашей первой закрывающей скобки не является допустимым коммутатором, поэтому сообщение об ошибке, re получение.

PHP-документы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню