Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 20.11.2024)
725740
осіб
369
літаків
329
гелікоптерів
9390
танків
19119
ББМ
20681
артилерія
1001
ППО
1252
РСЗВ
29648
машин
28
кораблі і катери
Уроки PHP – регулярні вирази з прикладами
Опубліковано

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

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *


Швидкий доступ по сайту SebWeo
Пригости мене кавою