2014-01-29 7 views
3

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

/^(?:'[A-z](([\._\-][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[/^[A-Z a-z 0-9 _ . \-]+$/]|is_unique[user.username]'); 

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

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

+2

** Предупреждение: ** '[A-z]' не совпадает с '[A-Za-z]'. Он также соответствует нескольким символам пунктуации, чьи кодовые точки лежат между 'Z' и' a'. Ошибка использования диапазона 'A-z' в классе символов. –

ответ

5

Хотя есть нетregex_match() метода в CodeIgniter validation library, это не указано в руководстве пользователя CI.

Per @Limon «s комментарий:

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

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

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

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]'); 
+0

привет, спасибо за ответ. В codeigniter form_validation.php имеется regex_match. Именно это: общественная функция алгоритма regex_match ($ ул, $ регулярное выражение) \t { \t \t если \t \t { \t \t \t возвращение FALSE; (preg_match ($ регулярное выражение, $ строка)!) \t \t} \t \t return TRUE; \t} – Limon

+0

@Limon Да, я только что обновил ответ. –

+0

Еще раз спасибо. Я нашел в этом вопросе http://stackoverflow.com/questions/13804721/regex-match-in-codeigniter-form-validation-generates-message-preg-match-no что есть ошибка в Codeigniter с трубой, он прерывает регулярное выражение. Есть ли способ сделать мое регулярное выражение без трубы | ? – Limon

-1

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

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

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

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