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

Tags: php

Recent Posts

Правильний вибір якісних гральних карт

Відомо, що перші гральні карти були винайдені династією Тан в Китаї ще в 9 столітті.… Read More

15/11/2020

Як знайти нову роботу – кращі тактики

Давно минули ті часи, коли люди отримували роботу одразу ж після закінчення навчання, і залишалися… Read More

13/11/2020

Ліцензування Zoom в Україні – тарифи і ціни

Самоізоляція 2020 року поставила людей в досить суворі умови – незважаючи на вимушені карантинні заходи,… Read More

10/11/2020

Десятка найбільш хокейних міст України

Чи є в Україні хокей? Багато шанувальників цього виду спорту асоціюють гру з шайбою на… Read More

09/11/2020

Переваги б/в ноутбуків та критерії вибору техніки

Сучасний ринок комп'ютерної техніки постійно оновлюється, щорічно пропонуючи користувачам нові і більш потужні моделі ПК… Read More

03/11/2020

Найкращі водоспади світу (частина 1)

Водоспад – це одне з найбільш хвилюючих і найкрасивіших творінь матінки-природи у світі. По всьому… Read More

31/10/2020