У меня есть это регулярное выражение для проверки в 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]'));
Таким образом, регулярное выражение с трубками не будет аварийно