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

Все регулярные выражения в этой статье написаны для кодировки UTF8, в каждой регулярке используется модификатор шаблона "u". Подробнее о "Модификаторах шаблона" смотрите в документации PHP тут. Все примеры regexp (регулярных выражений) проверены и 100% рабочие.

Проверка строки

Только буквы, цифры и некоторые символы

Проверка строки при помощи regexp на соответствие таким требованиям: только цифры, прописные и заглавные буквы латинского, украинского, русского алфавита; символы запятой, апострофа, пробела, тире; общее кол-во символов в строке - не менее одного и не более 30.

$pattern = '~^[0-9a-zа-яґєіїё\,\\\'\s-]{1,30}$~ui';

В регулярном выражении учтено, что в интервал "а-я" регулярного выражения не входят буквы "ґ", "є", "і", "ї" - украинского алфавита и буква "ё" - русского.

Идущие подряд три косые черты, за которыми следует апостроф: "\\\'" обозначают не "разрешить косую черту и апостроф", как может показаться на первый взгляд, а разрешают только апостроф. Три косые черты нужны из-за того, что вся "программа" regexp заключена между символами апострофа.

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

$pattern = '~(?:^[а-яё]+[\-]?[а-яё]+$)|(?:^[a-z]+[\-\`]?[a-z]+$)|(?:^[абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]+[\-\`]?[абвгґдеєжзиіїйклмнопрстуфхцчшщьюя]+$)~iu';

P.S. В операционных системах Windows, таких как: Vista, Windows 7 и 8 в расширенную раскладку клавиатуры для украинского языка были добавлены апостроф (вместо русской строчной буквы "ё"), а также возможность набирать символ гривны ₴, используя: "⇧Shift + `" (как если бы набиралась заглавная буква Ё на русской раскладке). На клавиатурах у которых нет 102 дополнительной кнопки буквы "Ґ", этот символ возможно набрать используя комбинацию клавиш: "AltGr + Г" .

Проверка e-mail на корректность

Регулярное выражение для проверки e-mail на корректность. Проверяется, что у e-mail домен второго или третьего уровня (user@example.com или user@example.org.ua) или e-mail находится в IP-адресе (user@192.168.1.1).

$pattern = '~^[a-z0-9._-]{1,50}@(?:([a-z0-9_-]{1,50}\.)(?:[a-z]{0,9}\.)(?:[a-z]{2,9})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$~ui';

Данная проверка поможет отсеять несуществующие e-mail адреса и пропустит подавляющее большинство реальных адресов электронной почты, regexp протестировано на большом количестве скриптов проверки корректности e-mail адреса. В этой проверке заметно сужено количество возможных шаблонов e-mail адреса, которые описаны в RFC, связано это с тем, что стандарт весьма далек от сегодняшних реалий (habrahabr.ru/post/224623/).

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

filter_var($email, FILTER_VALIDATE_EMAIL);

По мнению автора статьи проверка при помощи собственного regexp более предпочтительна, чем с использование PHP функции filter_var.

Удаление подряд идущих пробелов

$str = 'abz   sa sa';
$str = preg_replace('~\s{2,}~u', ' ', $str);

Точнее, это регулярное выражение заменяет два или более подряд идущих пробела на один символ пробела.

Опубликовано: 2015/01/12
HTML-код ссылки на эту страницу:
<a href="http://petrenco.com/php.php?txt=189" target="_blank">Регулярные выражения PHP</a>
3989
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.