2015-11-05 3 views
1

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

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

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] (http://php.net/manual/en/regexp.reference.delimiters.php) –

+0

Это прояснило это , благодаря! –

+0

@MarkBaker, вы хотите выразить это как ответ, чтобы люди не преследовали это? В противном случае, возможно, нам следует закрыть вопрос о том, что это более простая коррекция. –

ответ

0

Вам нужно обернуть регулярное выражение в / или # "ограничителей" или аналогичный.

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

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

PHP Docs

Смежные вопросы