Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 15.03.2024)
428420
солдат
347
самолетов
325
вертолетов
6758
танков
12949
ББМ
10580
артиллерия
717
ПВО
1017
РСЗО
13993
машин
26
корабли и катера
Уроки PHP – регулярные выражения с примерами
Опубликовано Обновлено: 17.04.2019

Уроки 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 скриптах.

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *