Php (регулярний вираз) - що це таке? Приклади і перевірка регулярних виразів

При роботі з текстами в будь-якому сучасному мові програмування розробники постійно зустрічаються з завданнями перевірки введених даних на відповідність потрібного шаблону, пошуку і заміни тестових фрагментів та іншими типовими операціями з обробки символьної інформації. Розробка власних алгоритмів перевірки призводить до втрати часу, несумісності програмного коду і складності в його розвитку і модернізації.

Бурхливий розвиток Інтернету та мов WEB-розробки зажадало створення універсальних і компактних засобів обробки текстової інформації при мінімальній кількості необхідного для цього коду. Не є винятком і популярний серед початківців і професійних розробників мову PHP. Регулярний вираз як мову шаблонів дозволяє спростити завдання обробки тексту і зменшити програмний код на десятки і сотні рядків. Багато задач взагалі неможливо вирішити без нього.

php регулярний вираз

Регулярні вирази в PHP

Мова PHP містить три механізму роботи з регулярними виразами - «ereg», «mb_ereg» і «preg». Найбільш поширеним є інтерфейс «preg», функції якого забезпечують доступ до бібліотеки підтримки регулярних виразів PCRE, спочатку розробленої для мови Perl, яка входить в комплект PHP. Preg-функції шукають в заданій текстовій рядку збіги, згідно певним шаблоном на мові регулярних виразів.

основи синтаксису

регулярні вирази приклади

В рамках короткої статті неможливо докладно описати весь синтаксис регулярних виразів, для цього існує спеціальна література. Наведемо лише основні елементи для показу широких можливостей для розробника і розуміння прикладів коду.

У PHP регулярний вираз формально визначається дуже складно, і тому спростимо опис. Регулярний вираз являє собою текстовий рядок. Вона складається з виділеного роздільником шаблону і модифікатора, що вказує на те, яким чином його обробляти. Можливе включення в шаблони різних альтернатив і повторень.

Наприклад, у виразі / D {3} - d {2} - d {2} / m роздільником буде «/», далі йде шаблон, а символ «M» буде модифікатором.

Вся міць регулярних виразів кодується за допомогою метасимволов. Основним метасимволом мови є зворотний слеш - «». Він змінює тип наступного за ним символу на протилежний (т. Е. Звичайний символ перетворюється в метасимвол і навпаки). Іншим важливим метасимволом є пряма лінія «|», що задає альтернативні варіанти шаблону. Ще приклади метасимволов:

^Початок об`єкта або рядки
(початок подшаблона
)закінчення подшаблона
{початок квантіфікатора
}кінець квантіфікатора
dдесяткова цифра від 0 до 9
Dбудь-який символ, який не є цифрою
sпорожній символ, пробіл, табуляція
wсловниковий символ

PHP, обробляючи регулярні вирази, пробіл розглядає як окремий значимий символ, тому висловлювання АБВГД і АБВ ДЕ є різними.

Подшаблони

У PHP регулярні подшаблони виділяються круглими дужками і іноді називаються «подвираженія». Виконують такі функції:

  1. виділення альтернатив. Наприклад, шаблон жар (дещо | птиця |) співпаде зі словами «Жар», «жар-птиця» і «Спекотне». А без дужок це буде тільки порожній рядок, «птах» і «спекотне».

  2. «Захоплюючий» подшаблон. Це означає, що якщо в шаблоні збіглася подстрока, то в якості результату повертаються всі збіги. Для наочності наведемо приклад. Дано наступне регулярний вираз: переможець отримує ((золоту | позолочений) (медаль | кубок)) - і рядок для пошуку збігів: «Переможець отримує золоту медаль». Крім вихідної фрази, в результаті пошуку будуть видані: «Золоту медаль», «Медаль», «золоту».

Оператори повторень (квадріфікатори)

При складанні регулярних виразів дуже часто необхідно аналізувати повторення чисел і символів. Це не є проблемою, якщо повторень не дуже багато. Але що робити, коли ми не знаємо їх точного числа? В такому випадку необхідно використовувати спеціальні метасимволи.

Для опису повторень застосовуються квадріфікатори - метасимволу для завдання кількості. Квадріфікатори бувають двох типів:

  • загальні, укладені в дужки;
  • скорочені.

Загальний квантіфікатор зачеплений мінімальну та максимальну кількість дозволених повторень елемента у вигляді двох чисел в фігурних дужках, наприклад так: х {2,5}. Якщо максимальна кількість повторень невідомо, другий аргумент не вказується: х {2}.

Скорочені квантіфікатори представляють собою символи для найбільш поширених повторень щоб уникнути зайвої перевантаження синтаксису. Зазвичай використовуються три скорочення:

1. * - нуль і більше повторень, що еквівалентно {0,}.



2. + - одне і більш повторень, т. Е. {1,}.

3.? - Нуль або тільки одне повторення - {0,1}.

Приклади регулярних виразів

Для тих, хто вивчає регулярні вирази, приклади - кращий підручник. Ми наведемо кілька, які показують їх широкі можливості при мінімумі зусиль. Всі програмні коди повністю сумісні з версіями PHP 4.x і вище. Для повного розуміння синтаксису і використання всіх можливостей мови рекомендуємо книгу Дж. Фрідл «Регулярні вирази», де повністю розглядається синтаксис і є приклади регулярних виразів не тільки на PHP, але і для мов Python, Perl, MySQL, Java, Ruby і C #.

Перевірка коректності адреси E-mail

Завдання. Існує Інтернет-сторінка, на якій у відвідувача запитується адреса email. Регулярний вираз має перевіряти правильність отриманої адреси перед відправкою повідомлень. Перевірка не дає гарантії, що Вам за вказаною адресою реально існує і приймає листи. Але відсіяти свідомо неправильні адреси вона може.

Рішення. Як і в будь-якій мові програмування, на PHP регулярні вирази email-перевірки адреси можуть бути реалізовані різними способами, і приклади в цій статті не є остаточним і єдиним варіантом. Тому в кожному випадку ми будемо наводити перелік вимог, які потрібно врахувати при програмуванні, а конкретна реалізація повністю залежить від розробника.

Отже, вираз, що перевіряє правильність email, має перевіряти такі умови:

  1. Наявність в заданій стрічці символу @ та відсутність пробілів.
  2. Доменна частина адреси, за символом @, містить тільки допустимі символи для доменних імен. Те саме можна сказати і до імені користувача.
  3. При перевірці імені користувача необхідно визначити наявність спеціальних символів, таких як апостроф або вертикальна риса. Такі символи відносяться до потенційно небезпечним і можуть міститися в таких видах нападів, як SQL-ін`єкції. Уникайте таких адрес.
  4. Імена користувача допускають наявність тільки однієї точки, яка не може бути першим або останнім символом у рядку.
  5. Доменне ім`я повинне містити не менше двох і не більше шести символів.

Приклад, що враховує всі зазначені умови, можна побачити далі на малюнку.

php регулярні вирази email

Перевірка правильності адрес URL

Завдання. Перевірити, чи є задана текстовий рядок допустимим адресою URL. Ще раз відзначимо, що регулярні вирази URL-перевірки можуть бути реалізовані різними способами.

Рішення. Наш підсумковий варіант виглядає наступним чином:



/^(https?://)?([da-z.-]+).([az.]{2,6})([/w .-] *) * /? $ /

Тепер розберемо його складові більш детально, використовуючи малюнок.

регулярні вирази url

п.1Перед адресою URL не повинно бути ніяких символів
п.2Перевіряємо наявність обов`язкового префікса «http»
п.3Не повинно бути символів
п.4Якщо присутній «s», то URL вказує на захищене з`єднання «https»
п.5Обов`язковий фрагмент «//»
п.6немає символів
п. 7-9Перевірка правильності домену першого рівня і наявності точки
п.10-13Контроль правильності написання домену другого рівня і точки
п.14-17

Файлова структура URL - набір цифр, букв, підкреслення, дефісів, точок і слеш в кінці

Перевіряємо номера кредитних карт

Завдання. Необхідно реалізувати перевірку правильності введеного номера платіжної картки найбільш поширених платіжних систем. Розглянуто варіант тільки для карт Visa і MasterCard.

Рішення. При створенні вираження необхідно враховувати можливу наявність у введеному номері прогалин. Цифри номера на мапі розділені на групи для спрощення читання і диктування. Тому цілком природно, що людина може спробувати ввести номер таким чином (т. Е. Використовуючи прогалини).

Написати універсальне вираження, що враховує можливі прогалини і дефіси, складніше, ніж просто відкинути всі символи, крім цифр. Тому в вираженні рекомендується використовувати метасимвол / D, який видаляє всі символи, крім цифр.

Тепер можна переходити безпосередньо до перевірки номера. Всі компанії, що випускають кредитні карти, використовують унікальний формат номера. У прикладі це використовується, і клієнтові немає необхідності вводити найменування компанії - вона визначається за номером. Картки Visa завжди починаються з 4 і мають довжину номера в 13 або 16 цифр. MasterCard починається в діапазоні 51-55 з довжиною номера 16. У підсумку отримуємо такий вираз:

регулярні вирази приклади

Перед обробкою замовлення можна провести додаткову перевірку останньої цифри номера, яка обчислюється за алгоритмом Місяць.

Перевірка телефонних номерів

Завдання. Перевірка коректності введеного телефонного номера.

Рішення. Кількість цифр в стаціонарних і мобільних телефонних номерах істотно відрізняється в залежності від країни, тому універсально перевірити, використовуючи регулярні вирази, номер телефону на правильність неможливо. Але міжнародні номери мають строгий формат і відмінно підходять для перевірки за шаблоном. Тим більше що все більше національних телефонних операторів намагаються відповідати єдиному стандарту. Структура номера наступна:

+CCC.NNNNNNNNNNxEEEE, де:

- C - це код країни, що складається з 1-3 цифр.

- N - номер довжиною до 14 цифри.

- E - необов`язкове розширення.

Плюс є обов`язковим елементом, а знак х присутній тільки при необхідності розширення.

В результаті маємо такий вираз:

^ + [0-9] {1,3} . [0-9] {4,14} (?: x. +)? $

Числа в діапазоні

Завдання. Необхідно забезпечити збіг цілого числа з певного діапазону. Додатково необхідно, щоб знаходили регулярні вирази тільки цифри з діапазону значень.

Рішення. Наведемо кілька виразів для декількох найбільш поширених випадків:

Визначаємо час від 1 до 24^ (1 [0-2] | [1-9]) $
День всередині місяця 1-31^ (3 [01] | [12] [0-9] | [1-9]) $
Секунда або хвилина 0-59^ [1-5]? [0-9] $
Число від 1 до 100^ (100 | [1-9]? [0-9]) $
День року 1-366^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} | [1-9] [0-9]?) $

Пошук IP-адреси

Завдання. Необхідно визначити, чи є заданий рядок допустимим IP-адресою в форматі IPv4 в діапазоні від 000.000.000.000-255.255.255.255.

Рішення. Як і в будь-якій задачі на мові PHP, регулярний вираз має безліч варінт. Наприклад, таке:

регулярні вирази пробіл

Онлайн-перевірка виразів

email регулярний вираз

Перевірка регулярних виразів на правильність для початківців програмістів Можуть виникнути труднощі зі через складність синтаксису, що відрізняється від «звичайних» мов програмування. Для вирішення даної проблеми існує безліч онлайн-тестерів виразів, що дозволяють легко перевірити правильність створеного шаблону на реальному тексті. Програміст вводить вираз і дані для перевірки і миттєво бачить результат обробки. Зазвичай тут же присутній довідковий розділ, де детально описуються регулярні вирази, приклади і відмінності реалізації для найбільш поширених мов програмування.

Але повністю довіряти результатам онлайн-сервісів не рекомендується всім розробникам, які користуються PHP. Регулярний вираз, написаний і перевірений особисто, підвищує кваліфікацію і гарантує відсутність помилок.


Увага, тільки СЬОГОДНІ!


Поділися, будь ласка статтю
всього голосів: 88
Увага, тільки СЬОГОДНІ!