regex match в форме CodeIgniter проверка генерирует: сообщение: preg match(): нет конечного разделителя ' / ' найдено

Я искал в других подобных сообщениях, и проблема, казалось, была неотвратимой косой чертой. Однако я избегаю их.

вот как должна выглядеть строка:

23/12/2012

и вот как я объявляю правило проверки:

regex_match[/^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)[0-9]{2}$/]

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

regex_match[/^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$/]

где ошибка?

EDIT:

следуя вашему совету, я попытался использовать функцию обратного вызова. Это объявление, которое находится в классе контроллера, в котором выполняется проверка формы:

function mach_date($date) {
   /* DEBUG */ echo 'Here I am!'; exit; // execution should stop here displaying the echo
   return (bool)preg_match('/^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$/', $date);
}

правила проверки в application/config / form_validation.в PHP:

$config = array(
     // other validation groups.....,
     'articles' => array(
          // other validated fields.....,
          array(
                'field' => 'date_p',
                'label' => 'Publishing date',
                'rules' => 'callback_match_date'
          )
     )
); 

1 ответов


когда вы устанавливаете правила проверки, вы разделяете их с помощью | so |в вашем регулярном выражении, что заставляет правило проверки разделяться на них, и это вызывает ошибку. Обсуждение здесь по этому вопросу. Кажется, это ограничение или ошибка в CodeIgniter. Вы можете проверить его, запустив регулярное выражение С и без |и посмотреть, вызовет ли использование каналов ошибку. Если это так, то вам может потребоваться проверить regex другими средствами, возможно, используйте функцию обратного вызова как подробно об этом страница где ваша функция будет делать preg_match, используя регулярное выражение, которое должно быть внутри функции, конечно, а затем возвращать true/false.