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

 

Share

Останні пости

Як вибрати ідеальний ноутбук: Повний гайд

Вибір ноутбука може бути складним завданням у світі, де ринок переповнений варіантами на будь-який смак… Читати далі

22/04/2024

Томас Едісон

Наш великий недолік в тому, що ми занадто швидко опускаємо руки. Найбільш діючий метод досягти… Читати далі

20/04/2024

Найкрасивіші та найбільш вражаючі мости з усього світу (ТОП-10)

Міст — це щось більше, ніж просто споруда, яка поєднує два береги. Для того, щоб… Читати далі

19/04/2024

Соломон

Життя нас вчить, що свою пару ми пізнаємо, коли розлучаємося, своїх братів ми пізнаємо, коли… Читати далі

18/04/2024

Чак Поланік

Хто може — той робить. Хто не може — той критикує Чак Поланік   Читати далі

17/04/2024

Річард Бах

Жодне бажання не дається тобі окремо від сили, що дозволяє його здійснити. Хоча, можливо, для… Читати далі

16/04/2024