Від автора: вітаю вас, друзі. У цій статті ми вже безпосередньо почнемо вивчати можливості регулярних виразів, познайомимося з функцією preg_match() в PHP, а також складемо перше регулярне вираз перевірки на число.
Почати статтю, мабуть, варто з того, що регулярні вирази — це дуже потужний засіб для роботи з текстом. Як ви вже знаєте, з допомогою регулярних виразів ми можемо відшукати в масиві тексту буквально що завгодно. Однак зловживати такою міццю не варто. Не забувайте про те, що PHP пропонує нам масу функцій для роботи з рядками, типами і так далі, які дозволяють перевірити, скажімо, наявність певного символу або підрядка в рядку.
Тому, якщо є можливість вирішити завдання без залучення регулярних виразів, тоді варто використовувати цю можливість, оскільки функції для роботи із регулярними виразами, як правило, більш ресурсоемки. В даному випадку завдання можна вирішити і без регулярних виразів. Наприклад, перевірити чи є всі символи в рядку числовими можна з допомогою функції ctype_digit().
Але за умовами поставленої у статті завдання нам необхідно використовувати регулярні вирази, тому вирішимо поставлену задачу, використовуючи функцію preg_match(). Ця функція перевіряє рядок на відповідність шаблону регулярного виразу. Функція має 5 параметрів, з яких на практиці практично завжди використовуються тільки перші 2.
Перший параметр функції буде шаблоном регулярного виразу. Другий — перевіряється рядок. Іноді може знадобиться третій параметр, вказавши який ми отримаємо масив з результатами пошуку.
Давайте складемо свій перший шаблон. Виглядати він може наступним чином:
$pattern = ‘#^[0-9]+$#’;
На перший погляд може виглядати незрозуміло і кілька лякаюче. Проте нічого страшного тут немає, зараз ми його розглянемо. Почнемо з того, що регулярні вирази активно використовують спеціальні символи, т. зв. метасимволи. У нашому шаблоні їх досить багато:
^ — метасимвол початку рядка
$ — метасимвол кінця рядка
[] — метасимволи символьного класу
+ — квантіфікатор, що позначає 1 або більше входжень символу або групи символів, після яких використано квантіфікатор.
Отже, що ж ми отримали? Як можна прочитати складений шаблон регулярного виразу? А читається так:
рядок буде валидироваться повністю, від початку до кінця (метасимволи ^$)
у рядку можуть бути тільки цифри від 0 до 9 ([0-9])
у рядку повинна бути як мінімум одна цифра (+)
Тепер давайте перевіримо шаблон в дії.
Як бачимо, регулярний вираз працює коректно. Під нього підійшли тільки рядки, що повністю складаються з цифр. До речі, якщо ви тестуєте також на сайті regexr.com і в тексті більше одного рядка, тоді для шаблону необхідно вказати спеціальний прапор — m, що дозволить шаблоном працювати з многострочным текстом. Зробити це можна в правому верхньому куті, пункт меню flags.
Зверніть увагу, що станеться, якщо ми приберемо метасимволи початку/кінця рядка:
Тепер ми вадидируем не весь рядок, а просто шукаємо щось в рядку. В результаті в третьому рядку були знайдені цифри, хоча за умовою задачі ця рядок нам не підходить. Тепер давайте використаємо функцію preg_match і перевіримо кожну з рядків окремо:
$arr = [‘123’, ‘test’, ’45ew45′, ‘456’];
$pattern = ‘#^[0-9]+$#’;
foreach($arr as $item){
if( preg_match($pattern, $item) ){
echo “
Рядок $item містить тільки цифри
“;
}else{
echo “
Рядок $item не підходить
“;
}
}
В результаті ми побачимо, що і передбачали:
Як бачимо, все працює відмінно! На цьому ми будемо завершувати цю статтю. Нагадую, що більше про регулярних виразах ви можете дізнатися з нашого курсу з регулярними виразами. Удачі!