Регулярное выражение (regexp) для поиска в тексте номера телефона украинского оператора средствами PHP

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

Итак, объясню на примере. Что мы имеем в качестве задачи? А имеем мы примерно такой текст:

Список заказавших:
Виктория М (+380684876397) - 2шт.
Nastyk Minskaya (0983890014) - 5шт.
Натали 066-389-00-14 - 1шт.
Анэт (м.т.067-03032458) - 3шт.
Татьяна (м.т.0970975357) - 2шт.
Вика (т.067-34-56-633) - 1шт.
Анна (+38098-456-44-65) - 6шт.
и т.д.

Сами понимаете, размещать такой текст на страницах сайта будет явно некорректно. Надо или убрать номера телефонов или скрыть часть цифр из каждого номера. Вот этим мы и займёмся.

Для начала надо найти в тексте номера телефонов. Потом заменить часть номера на символы типа ХХХХХХ. И полученный текст вывести на экран.

Для поиска в тексте номера телефона и замене символов наилучшим образом подойдёт функция PHP preg_replace для поиска и замены по шаблону используя регулярные выражения RegExp.

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

Функция выполняет поиск совпадений в строке subject с шаблоном pattern и заменяет их на replacement.

Вот и получается, что на PHP надо записать что-то типа:

$text = ' ...... '; # Задаём текст
$pattern = ' ...... '; # Задаём шаблон
$replacement = ' ...... '; # Задаём шаблон замены
$text = preg_replace($pattern, $replacement, $text); # Выполняем замену
echo $text; # выводим текст

Остаётся самое малое - написать шаблоны. Для облегчения этой задачи нам отлично поможет сайт regexr.com на котором можно легко тестировать создаваемые шаблоны для регулярных выражений.

В поле Text на сайте я ввёл пример своего текста, а в поле Expression я прописывал регулярное выражение так, чтобы находились в тексте номера телефонов с разным написанием.

В итоге у меня получился следующий шаблон для поиска:

((\+)?\b(8|38)?(0[\d]{2}))([\d-]{5,8})([\d]{2})

А заменять мы будем на шаблон:

$1ХХХХХ$6

Где вместо $1 будут подставляться начальная часть номера и $6 - конечная часть номера из двух цифр.

В окончательном варианте у меня получился PHP код такого вида:

$text = 'Виктория М (+380684876397) - 2шт.'; # Задаём текст
$pattern = '/((\+)?\b(8|38)?(0[\d]{2}))([\d-]{5,8})([\d]{2})/'; # Задаём шаблон
$replacement = '$1ХХХХХ$6'; # Задаём шаблон замены
$text = preg_replace($pattern, $replacement, $text); # Выполняем замену
echo $text; # выводим текст

В результате мы получим на выходе текст:

Виктория М (+38068ХХХХХ97) - 2шт.

Можно сократить PHP код и тода получим следующее:

$text = preg_replace('/((\+)?\b(8|38)?(0[\d]{2}))([\d-]{5,8})([\d]{2})/', '$1ХХХХХ$6', $text);

Вот и всё, задача поиска номера телефона по шаблону и скрытие символов в номере телефона успешно решена. Получен шаблон регулярного выражения для поиска и замены части телефонного номера на определённые символы. Данный шаблон вы можете свободно использовать в своих будущих PHP скриптах.

Автор: Попов Вадим

11/11/2019 15:41 79

Продажи Alibaba в «День холостяков» 11.11 уже превысили $30 млрд

Китайский онлайн-ретейлер Alibaba находится на пути к новому рекорду продаж в «День холостяков» 11 ноября. По данным ретейлера, на 16:31 по местному времени (10:31 по Киеву) продажи превысили...

07/11/2019 19:10 87

AMD выводит на рынок 16-ядерный процессор Ryzen 9 3950X

Формально представив процессор Ryzen 9 3950X ещё в середине года, компания AMD сперва обещала начать продажи в сентябре, но к концу третьего квартала заявила, что новинка с 16 ядрами выйдет на рынок только...

31/10/2019 13:30 143

Смартфон Samsung Galaxy A90s получит аккумулятор ёмкостью 4200 мА·ч

Смартфон Samsung Galaxy A90 в настоящее время является самым доступным аппаратом с поддержкой сетей связи пятого поколения (5G) среди имеющихся в арсенале южнокорейского производителя. С момента его запуска...

Компьютерный мир

Вся информация на страницах сайта предназначена только для личного не коммерческого использования, учёбы, повышения квалификации и не включает призывы к каким либо действиям.

Частичное или полное использование материалов сайта разрешается только при условии добавления ссылки на непосредственный адрес материала на нашем сайте.