• Теги этой статьи
  • Регулярное выражение (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 скриптах.

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

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

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

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