Intereting Posts
Как данные POST как индексированный массив массивов (без указания индексов) Почему пустой ожидает T_PAAMAYIM_NEKUDOTAYIM, когда задана не переменная? Как экспортировать массив PHP, где каждая пара ключей и значений находится в отдельной строке? openbase_dir и подкаталоги Как настроить ответ косой черты на весь канал? SQL-запрос для отображения строк, которые в прошлом были старше 60+ Предупреждение: функция файлового архива не работает Добавьте два часа к дате в течение заданных часов, которые переносятся на следующий таймфрейм получать данные из бэкэнда в три столбца в одной строке PHP: Как получить доступ к папке загрузки вне корневого каталога? Как разобрать сообщения о доставке Уведомления, отправленные от Mailer Deamons Как запустить файл PHP в запланированной задаче (Планировщик задач Windows) PHP: get_called_class () vs get_class ($ this) PHP str_replace с wild card? синтаксическая ошибка, неожиданный '' sidebar_bann '(T_ENCAPSED_AND_WHITESPACE), ожидающий'] 'при работе с MongoDB ODM и ZF2

Регулярное выражение Codeigniter

У меня есть это регулярное выражение для проверки в javascript:

/^(?:'[Az](([\._\-][A-z0-9])|[A-z0-9])*[a-z0-9_]*')$/ 

Теперь я хочу одно и то же регулярное выражение для проверки формы с помощью проверки формы Codeigniter:

 $this->form_validation->set_rules('username', 'Nombre de usuario', 'required|min_length[2]|max_length[15]|regex_match[/^[AZ az 0-9 _ . \-]+$/]|is_unique[user.username]'); 

регулярное выражение в этой строке не эквивалентно тому, что я упоминал.

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

Хотя в библиотеке проверки CodeIgniter отсутствует regex_match() , он не указан в Руководстве пользователя CI.

Комментарий Per @Limon :

В CodeIgniter есть ошибка с трубой | , он ломает регулярное выражение.

CodeIgniter использует | как разделитель между методами проверки достоверности.

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

 public function regex_check($str) { if (1 !== preg_match("/^(?:'[A-Za-z](([\._\-][A-Za-z0-9])|[A-Za-z0-9])*[a-z0-9_]*')$/", $str)) { $this->form_validation->set_message('regex_check', 'The %s field is not valid!'); return FALSE; } else { return TRUE; } } 

Затем добавьте правило проверки следующим образом:

 $this->form_validation->set_rules('username', 'Nombre de usuario', 'required|min_length[2]|max_length[15]|callback_regex_check|is_unique[user.username]'); 

Вы могли бы предоставить правила как массив:

 $this->form_validation->set_rules('username', 'Nombre de usuario', array('required', 'min_length[2]', 'max_length[15]', 'regex_match[/^(?:\'[Az](([\._\-][A-z0-9])|[A-z0-9])*[a-z0-9_]*\')$/]', 'is_unique[user.username]')); 

Таким образом, регулярное выражение с трубками не будет аварийно