PHP

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

Регулярные выражения — система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи образцов для поиска. Образец (англ. pattern), задающий правило поиска, по-русски также иногда называют «шаблоном», «маской».

Общая задача механизма регулярных выражений - находить или не находить совпадения строки или ее части с шаблоном. В PHP существует несколько функций для работы с регулярными выражениями: ereg(), ereg_replace(), eregi(), ereg_replacei() и split().

Не буду вдаваться в синтаксис, об их назначении и применении можно много узнать из документации или используя гугл.

Хочу лишь кратко остановиться на реализации, с помощью регулярных выражений, тех задач, с которыми мне пришлось столкнуться лично и на поиск которых мне пришлось потратить какое-то время.

В PHP, для выполнения проверки на соответствие регулярному выражению, зачастую используют функцию preg_match(), которая ищет в заданном тексте subject совпадения с шаблоном pattern:
int preg_match ( string pattern, string subject [, array matches [, int flags [, int offset]]])

Приведу решение частых нетривиальных задач, решение которых другими средствами (без регулярных выражений) было бы если не невозможным, то покрасней мере значительно более сложным.
Проверка e-mail

Предположим в наш обработчик obrabotka.php поступает из некой формы переменная $mail. Подразумевается, что она должна содержать адрес электронной почты. Для проверки корректности ввода пользователем электронного адреса воспользуемся следующей проверкой:
if (!preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is", strtolower($mail)))
{
echo “email адрес не верный”;
exit;
}

До знака «@» допускается от 1 до 20 символов, включая латинские символы a-z..A-Z, цифры от 0 до 9, а также символы точка «.» и тире «-». После знака «@» допускается ввод всё тех же символов, разделённых точкой, плюс 2-4 символа на обозначение доменной зоны “com”, “ru” и т.д.
Проверка ФИО (Фамилии Имени Отчества)

В данном случае задача состоит в том, чтобы ограничить ввод только допустимыми символами и только в формате «Фамилия Имя Отчество», «Фамилия И О» или же «Фамилия И.О.». Предполагается что фамилия, имя и отчество могут состоять из любых символов; фамилия должна быть отделена от имени пробелом; имя и отчество могут быть полными, а могут состоять из одной буквы-сокращения или же могут быть разделены пробелом; либо же после каждой буквы имени и отчества может стоять точка.

Проверка будет иметь вид:
if (preg_match("/([^\s]+)\s+([^\s.])[^\s.]*(?:\s|\.)([^\s.])[^\s.]*/", strtolower($fio)))
{
echo «ошибка ввода Ф.И.О.»;
exit;
}

Украинские буквы в регулярных выражениях

При задании проверки с помощью функции preg_match(), следует особо обращать внимание на символы І, і, Ї, ї, Є, є, Ґ, ґ и валидность проверки. Предположим необходимо проконтролировать корректность ввода имени пользователя, переменная $user_name, сохранив при этом возможность ввода украинских букв в именах (например «Іван», «Марія» и т.д.). При реализации проверки с помощью, регулярных выражений, стандартным рекомендуемым методом:
if (preg_match("/[^a-z,A-Z,0-9,а-я,А-Я,\-,\_]/", $user_name))
{
echo "ошибка, недопустимые символы";
exit;
}

часто возникает ошибка, при появлении в именах украинских букв. Для решения проблемы достаточно немножко модифицировать выражение, указав дополнительно возможность ввода символов І, і, Ї, ї, Є, є, Ґ, ґ.
if (preg_match("/[^a-z,A-Z,0-9,а-яіїєґ,А-ЯІЇЄҐ,\-,\_]/", $user_name))
{
echo "ошибка, недопустимые символы";
exit;
}

Проверка ввода чисел

Ну и на последок, для ограничения ввода только числовых значений (актуально например, для параметров id, page и т.д.) можно воспользоваться проверкой:
if (!preg_match("|^[\d]+$|", $id)) 
{
exit ("неверный формат запроса, требуется число");
}

Как видим механизм регулярных выражений предоставляет нам широкие возможности, но при этом является достаточно трудным для восприятия.. выражение вроде «/^(?:http:\/\/)?[-0-9a-z._]*.\w{2,4}[:0-9]*$/» способно завести в замешательство. Но зато функциональность и гибкость перекрывают с лихвой все недостатки.
Добавлено: 24 Августа 2013 01:51:27 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...