От автора: приветствую вас, друзья. В этой статье мы уже непосредственно начнем изучать возможности регулярных выражений, познакомимся с функцией preg_match() в PHP, а также составим первое регулярное выражение проверки на число.
Начать статью, пожалуй, стоит с того, что регулярные выражения — это очень мощное средство для работы с текстом. Как вы уже знаете, с помощью регулярных выражений мы можем отыскать в массиве текста буквально что угодно. Однако злоупотреблять такой мощью не стоит. Не забывайте о том, что PHP предлагает нам массу функций для работы со строками, типами и так далее, которые позволяют проверить, скажем, наличие определенного символа или подстроки в строке.
Поэтому, если есть возможность решить задачу без привлечения регулярных выражений, тогда стоит использовать эту возможность, поскольку функции для работы с регулярными выражениями, как правило, более ресурсоемки. В данном случае задачу можно решить и без регулярных выражений. Например, проверить являются ли все символы в строке числовыми можно с помощью функции ctype_digit().
Но по условиям поставленной в статье задачи нам необходимо использовать регулярные выражения, поэтому решим поставленную задачу, используя функцию preg_match(). Данная функция проверяет строку на соответствие шаблону регулярного выражения. Функция имеет 5 параметров, из которых на практике практически всегда используются только первые 2.
Первый параметр функции будет шаблоном регулярного выражения. Второй — проверяемая строка. Иногда может понадобится третий параметр, указав который мы получим массив с результатами поиска.
Давайте же составим свой первый шаблон. Выглядеть он может следующим образом:
1 |
$pattern = '#^[0-9]+$#'; |
На первый взгляд может выглядеть непонятно и несколько пугающе. Однако ничего страшного здесь нет, сейчас мы его разберем. Начнем с того, что регулярные выражения активно используют специальные символы, т.н. метасимволы. В нашем шаблоне их достаточно много:
^ — метасимвол начала строки
$ — метасимвол конца строки
[] — метасимволы символьного класса
+ — квантификатор, обозначающий 1 или более вхождений символа или группы символов, после которых использован квантификатор.
Итого, что же мы получили? Как можно прочесть составленный шаблон регулярного выражения? А читается он так:
строка будет валидироваться целиком, от начала до конца (метасимволы ^$)
в строке могут быть только цифры от 0 до 9 ([0-9])
в строке должна быть как минимум одна цифра (+)
Теперь давайте проверим шаблон в действии.
Как видим, регулярное выражение работает корректно. Под него подошли только строки, полностью состоящие из цифр. Кстати, если вы тестируете также на сайте regexr.com и в тексте более одной строки, тогда для шаблона необходимо указать специальный флаг — m, что позволит шаблону работать с многострочным текстом. Сделать это можно в правом верхнем углу, пункт меню flags.
Обратите внимание, что произойдет, если мы уберем метасимволы начала и/или конца строки:
Теперь мы вадидируем не всю строку целиком, а просто ищем что-то в строке. В итоге в третьей строке были найдены цифры, хотя по условию задачи эта строка нам не подходит. Теперь давайте используем функцию preg_match и проверим каждую из строк по отдельности:
1 2 3 4 5 6 7 8 9 10 |
$arr = ['123', 'test', '45ew45', '456']; $pattern = '#^[0-9]+$#'; foreach($arr as $item){ if( preg_match($pattern, $item) ){ echo "<p>Строка <b>$item</b> содержит только цифры</p>"; }else{ echo "<p>Строка <b>$item</b> не подходит</p>"; } } |
В результате мы увидим то, что и предполагали:
Как видим, все работает отлично! На этом мы будем завершать данную статью. Напоминаю, что больше о регулярных выражениях вы можете узнать из нашего курса по регулярным выражениям. Удачи!