Intereting Posts

Неизвестный модификатор '(' при использовании preg_match () с выражением REGEX

Я пытаюсь проверить даты, такие как DD / MM / YYYY с PHP, используя preg_match (). Вот как выглядит выражение REGEX:

$pattern = "/^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$/"; 

Но используя его с правильным значением, я получаю это сообщение: preg_match (): Неизвестный модификатор '('

Полный код:

  $pattern = "/^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$/"; $date = "01/03/2011"; if(preg_match($pattern, $date)) return TRUE; 

заранее спасибо

Избегайте / символов внутри выражения как \/ .

 $pattern = "/^([123]0|[012][1-9]|31)\/(0[1-9]|1[012])\/(19[0-9]{2}|2[0-9]{3})$/"; 

Как отмечали другие ответы, лучше использовать другой разделитель, который не используется в выражении, например ~ чтобы избежать эффекта «наклонных зубочисток», который затрудняет его чтение.

ваш разделитель есть /, но вы используете его внутри самого шаблона. Используйте другой разделитель или выйдите из /

Вы используете / как разделитель, а также в своем выражении. Теперь

 /^([123]0|[012][1-9]|31)/ 

Является ли «полное» выражение, и все последующие ожидаются как модификатор, также ( .

Вы можете просто использовать другой разделитель.

 ~^([123]0|[012][1-9]|31)/(0[1-9]|1[012])/(19[0-9]{2}|2[0-9]{3})$~ 

Или вы избегаете всего присутствия / внутри выражения, но я бы предпочел другой разделитель;) Его более читаемый.

Вы могли бы избежать косой черты / как было предложено. Тем не менее, это в конечном итоге приведет к Leaning Toothpick Syndome .

Обычно для разглаживания регулярных выражений используются разные разделители:

 // Using "=" as delimiter preg_match('=^ ... / ... $=', $input); 

checek date, используя функцию ниже

  function checkDateFormat($date) { //match the format of the date if (preg_match ("/^([0-9]{2}) \/([0-9]{2})\/([0-9]{4})$/", $date, $parts)) { //check weather the date is valid of not if(checkdate($parts[2],$parts[1],$parts[3])) return true; else return false; } else return false; } echo checkDateFormat("29/02/2008"); //return true echo checkDateFormat("29/02/2007"); //return false