Уроки 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 скриптах.
Останні пости
Як вибрати ідеальний ноутбук: Повний гайд
Вибір ноутбука може бути складним завданням у світі, де ринок переповнений варіантами на будь-який смак… Читати далі
Томас Едісон
Наш великий недолік в тому, що ми занадто швидко опускаємо руки. Найбільш діючий метод досягти… Читати далі
Найкрасивіші та найбільш вражаючі мости з усього світу (ТОП-10)
Міст — це щось більше, ніж просто споруда, яка поєднує два береги. Для того, щоб… Читати далі
Соломон
Життя нас вчить, що свою пару ми пізнаємо, коли розлучаємося, своїх братів ми пізнаємо, коли… Читати далі
Річард Бах
Жодне бажання не дається тобі окремо від сили, що дозволяє його здійснити. Хоча, можливо, для… Читати далі