PHP (формальний вираз) - що це таке? Приклади та перевірка формальних виразів

PHP (формальний вираз) - що це таке? Приклади та перевірка формальних виразів

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

Бурхливий розвиток Інтернету і мов WEB-розробки зажадав створення універсальних і компактних засобів обробки текстової інформації при мінімальній кількості необхідного для цього коду. Не є винятком і популярна серед початківців і професійних розробників мова 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. Доменне ім 'я має містити не менше двох і не більше шести символів.

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

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

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

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

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

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

п.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 цифр.

Визначаємо годину від 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, формальний вираз має безліч варінтів. Наприклад, таке:

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

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

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