Уроки PHP – регулярные выражения с примерами
В сегодняшней статье мы рассмотрим регулярные выражения в PHP, а также увидим практические примеры использования регулярных выражений в PHP скриптах.
Основы регулярных выражений в PHP
В самом начале появления регулярных выражений на них была возложена задача помощи при работе со строками в Unix системах. Позже они стали активно использоваться не только в других системах, но и в разных языках программирования.
В PHP регулярные выражения используются для синтаксического анализа текста в соответствии с определенным шаблоном. Используя регулярные выражения, вы можете легко найти по шаблону нужный текст в строке, и заменить его, если нужно, или просто сделать проверку на наличие такого текста.
Типы регулярных выражений
Существует 2 типа регулярных выражений:
- Perl совместимый
- POSIX расширенный
Perl совместимые функции – это такие как preg_match
, preg_replace
, а версии POSIX – такие как ereg
, eregi
. Учтите, что последние функции считаются устаревшими в PHP 5.3.0 и были удалены в PHP 7. Поэтому мы будем использовать только Perl совместимые функции. Важно знать, что при использовании Perl-совместимых регулярных выражений, такое выражение должно быть заключено в разделители, например, косую черту (/
).
Основной синтаксис регулярных выражений в PHP
Чтобы использовать регулярные выражения, сначала вам нужно изучить синтаксис шаблонов. Мы можем сгруппировать символы внутри шаблона следующим образом:
- Обычные символы, которые следуют один за другим, например,
hello
- Индикаторы начала и окончания строки в виде
^
и$
- Индикаторы подсчета, такие как
+
,*
,?
- Логические операторы, такие как
|
- Группирующие операторы, такие как
{}
,()
,[]
Пример шаблона регулярного выражения для проверки правильности адреса электронного ящика выглядит следующим образом:
^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$
Код PHP для проверки электронной почты с использованием Perl-совместимого регулярного выражения выглядит следующим образом:
<?php $pattern = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/"; $email = "some-email@test.com"; if (preg_match($pattern, $email)) { echo "Проверка пройдена успешно!"; } else { echo "Проверка не пройдена!"; } ?>
Теперь давайте посмотрим на подробный разбор синтаксиса шаблона при регулярном выражении:
Регулярное выражение (шаблон) | Проходит проверку (объект) | Не проходит проверку (объект) | Комментарий |
world | Hello world | Hello Ivan | Проходит, если шаблон присутствует где-либо в объекте |
^world | world class | Hello world | Проходит, если шаблон присутствует в начале объекта |
world$ | Hello world | world class | Проходит, если шаблон присутствует в конце объекта |
world/i | This WoRLd | Hello Ivan | Выполняет поиск в нечувствительном к регистру режиме |
^world$ | world | Hello world | Строка содержит только «world» |
world* | worl, world, worlddd | wor | Присутствует 0 или больше «d» после «worl» |
world+ | world, worlddd | worl | Присутствует по крайней мере одна «d» после «worl» |
world? | worl, world, worly | wor, wory | Присутствует 0 или 1 «d» после «worl» |
world{1} | world | worly | Присутствует одна «d» после «worl» |
world{1,} | world, worlddd | worly | Присутствует одна или больше «d» после «worl» |
world{2,3} | worldd, worlddd | world | Присутствует 2 или 3 «d» после «worl» |
wo(rld)* | wo, world, worldold | wa | Присутствует 0 или больше «rld» после «wo» |
earth|world | earth, world | sun | Строка содержит «earth» или «world» |
w.rld | world, wwrld | wrld | Содержит любой символ вместо точки |
^.{5}$ | world, earth | sun | Строка содержит ровно 5 символов |
[abc] | abc, bbaccc | sun | В строке есть «a», или «b» или «c» |
[a-z] | world | WORLD | В строке есть любые строчные буквы |
[a-zA-Z] | world, WORLD, Worl12 | 123 | В строке есть любые строчные или прописные буквы |
[^wW] | earth | w, W | Фактический символ не может быть «w» или «W» |
Теперь перейдем к более сложному регулярному выражению с подробным объяснением.
Практические примеры сложных регулярных выражений
Теперь, когда вы знаете теорию и основной синтаксис регулярных выражений в PHP, пришло время создать и проанализировать некоторые более сложные примеры.
1) Проверка имени пользователя с помощью регулярного выражения
Начнем с проверки имени пользователя. Если у вас есть форма регистрации, вам понадобится проверять на правильность имена пользователей. Предположим, вы не хотите, чтобы в имени были какие-либо специальные символы, кроме «_.-
» и, конечно, имя должно содержать буквы и возможно цифры. Кроме того, вам может понадобиться контролировать длину имени пользователя, например от 4 до 20 символов.
Сначала нам нужно определить доступные символы. Это можно реализовать с помощью следующего кода:
[a-zA-Z0-9_.-]
После этого нам нужно ограничить количество символов следующим кодом:
{4,20}
Теперь собираем это регулярное выражение вместе:
^[a-zA-Z-0-9_.-]{4,20}$
В случае Perl-совместимого регулярного выражения заключите его символами ‘/
‘. Итоговый PHP-код выглядит так:
<?php $pattern = '/^[a-zA-Z0-9_.-]{4,20}$/'; $username = "demo_user-123"; if (preg_match($pattern, $username)) { echo "Проверка пройдена успешно!"; } else { echo "Проверка не пройдена!"; } ?>
2) Проверка шестнадцатеричного кода цвета регулярным выражением
Шестнадцатеричный код цвета выглядит так: #5A332C
, также допустимо использование краткой формы, например #C5F
. В обоих случаях код цвета начинается с #
и затем идут ровно 3 или 6 цифр или букв от a до f.
Итак, проверяем начало кода:
^#
Затем проверяем диапазон допустимых символов:
[a-fA-F0-9]
После этого проверяем допустимую длину кода (она может быть либо 3, либо 6). Полный код регулярного выражения выйдет следующим:
^#(([a-fA-F0-9]{3}$)|([a-fA-F0-9]{6}$))
Здесь мы используем логический оператор, чтобы сначала проверить код вида #123
, а затем код вида #123456
. Итоговый PHP-код проверки регулярным выражением выглядит так:
<?php $pattern = '/^#(([a-fA-F0-9]{3}$)|([a-fA-F0-9]{6}$))/'; $color = "#1AA"; if (preg_match($pattern, $color)) { echo "Проверка пройдена успешно!"; } else { echo "Проверка не пройдена!"; } ?>
3) Проверка электронной почты клиента с использованием регулярного выражения
Теперь давайте посмотрим, как мы можем проверить адрес электронной почты с помощью регулярных выражений. Сначала внимательно рассмотрите следующие примеры адресов почты:
john.doe@test.com john@demo.ua john_123.doe@test.info
Как мы можем видеть, символ @
является обязательным элементом в адресе электронной почты. Помимо этого должен быть какой-то набор символов до и после этого элемента. Точнее, после него должно идти допустимое доменное имя.
Таким образом, первая часть должна быть строкой с буквами, цифрами или некоторыми специальными символами, такими как _-.
. В шаблоне мы можем написать это следующим образом:
^[a-zA-Z0-9_.-]+
Доменное имя всегда имеет, скажем, имя и tld (top-level domain) – т.е, доменную зону. Доменная зона – это .com
, .ua
, .info
и тому подобное. Это означает, что шаблон регулярного выражения для домена будет выглядеть так:
[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$
Теперь, если мы соберем все в кучу, то получим полный шаблон регулярного выражения для проверки адреса электронной почты:
^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$
В коде PHP эта проверка будет выглядеть следующим образом:
<?php $pattern = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/'; $email = "john_123.doe@test.info"; if (preg_match($pattern, $email)) { echo "Проверка пройдена успешно!"; } else { echo "Проверка не пройдена!"; } ?>
Надеемся, что сегодняшняя статья помогла вам при знакомстве с регулярными выражениями в PHP, а практические примеры пригодятся вам при использовании регулярных выражений в собственных PHP скриптах.
Последние посты
Авраам Линкольн
Мы не поможем людям, делая за них то, что они могли бы сделать сами Авраам… Читать далее
Как хранить кофе, чтобы он не терял вкус и аромат
Вкус приготовленного напитка зависит не только от сорта кофе, способа и степени прожарки, помола зерен,… Читать далее
Габриэль Гарсиа Маркес
Возраст — это не то, сколько тебе лет, а то, — как ты их чувствуешь… Читать далее
Краткое описание лицензий с открытым исходным кодом
Если вы создаете программное обеспечение, которым хотите поделиться, или используете программный продукт, который хотите модифицировать,… Читать далее
Нил Гейман
Люди думают, что будут счастливы, если переедут в другое место, а потом оказывается: куда бы… Читать далее
Уроки JavaScript — как начать работать с объектами
Объекты являются одной из самых важных и мощных функций JavaScript, и во многих встроенных функциях… Читать далее