Вывод телефона по маске php

preg_replace to mask parts of a phone number

Ok so after having re-read over my previous post asking for help on this one I found I wasn’t making it exactly clear what I was trying to do nor was I pointing out why. I have a site that I’m busy developing which may possibly display messages where people have left their phone numbers (even though this is stupid) and I need to be responsible and make sure should this be the case the numbers are masked. Firstly I need to search through the message text which is stored in a variable $messagetext then I need to use the preg_replace() function to mask parts of the number so its not clear what the number is so if someone were to leave a message and their number was «07921234567» it would appear on the message as «07**12*45**». How would this be done ? All I would like is to find out what function I’d use to search for the entire number (United Kingdom number) which may start +44 or 07 and what REGEX in the preg_replace() function as all i had was:

$extractednum = preg_replace( "/7/","*",$extractednum); echo ($extractednum); 

All this does is replace the entire number. The reason why I don’t wanna do this is I also have another site I’m working on to do with social networking privacy and I need to mask parts of the telephone numbers I retrieve for my example. Hopefully this is more clear and if someone could help me out with some code that would be great! Anything is appreciated!

Читайте также:  Php asp одном сервере

@MarcB: I think he is trying to be as responsible as he can to mask the numbers, but if the user tries to bypass the filter then probably no can do.

Why not just replace the last 9 digits with * s? Then it will always be 07********* or +447********* or 447********* .

Источник

Форматирование телефонных номеров

Несколько PHP-функций для форматирования телефонных номеров.

Формат +7 (xxx) xxx-xx-xx

Формат +7 (xxx) xxx-xx-xx очень распространён, но правильнее писать номера без скобок. В нормах русского языка скобки используются для поясняющей и дополняющей информации, а так как без кода оператора или города дозвониться до абонента не получится, то это уже не дополнительная информация.

function phone_format($phone) < $phone = trim($phone); $res = preg_replace( array( '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', ), array( '+7 ($2) $3-$4-$5', '+7 ($2) $3-$4-$5', '+7 ($2) $3-$4-$5', '+7 ($2) $3-$4-$5', '+7 ($2) $3-$4', '+7 ($2) $3-$4', ), $phone ); return $res; >

Тестирование и результаты

Мобильные и городские:

echo phone_format('+7 (495) 1234567'); echo phone_format('+8 (495) 123 45 67'); echo phone_format('+7(495)123-45-67'); echo phone_format('+7(495)1234567'); echo phone_format('+7 495 123-45-67'); echo phone_format('+8 495 123 45 67'); echo phone_format('+7 495 1234567'); echo phone_format('+7-495-123-45-67'); echo phone_format('84951234567');
+7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67 +7 (495) 123-45-67

Региональные:

echo phone_format('7 4734 12-34-56'); echo phone_format('7 4735 123-456');
+7 (4734) 12-34-56 +7 (4735) 123-456

С текстом:

echo phone_format('+7-495-123-45-67 Иван'); echo phone_format('+84951234567 доп. 123'); echo phone_format('+74951234567, +79031234567'); echo phone_format('тел. +84951234567');
+7 (495) 123-45-67 Иван +7 (495) 123-45-67 доп. 123 +7 (495) 123-45-67, +7 (903) 123-45-67 тел. +7 (495) 123-45-67

Номера с ошибками:

echo phone_format('495 1234567'); echo phone_format('8(8001234567'); echo phone_format('8800;1234567');
495 1234567 8(8001234567 8800;1234567

Формат +7 xxx xxx-xx-xx

function phone_format($phone) < $phone = trim($phone); $res = preg_replace( array( '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', ), array( '+7 $2 $3-$4-$5', '+7 $2 $3-$4-$5', '+7 $2 $3-$4-$5', '+7 $2 $3-$4-$5', '+7 $2 $3-$4', '+7 $2 $3-$4', ), $phone ); return $res; >

Результат:

/* Мобильные и городские */ +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 +7 495 123-45-67 /* Региональные */ +7 4734 12-34-56 +7 4735 123-456 /* С текстом */ +7 495 123-45-67 Иван +7 495 123-45-67 доп. 123 +7 495 123-45-67, +7 903 123-45-67 тел. +7 495 123-45-67 /* Номера с ошибками */ 495 1234567 8(8001234567 8800;1234567

Формат +7-xxx-xxx-xx-xx

function phone_format($phone) < $phone = trim($phone); $res = preg_replace( array( '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', ), array( '+7-$2-$3-$4-$5', '+7-$2-$3-$4-$5', '+7-$2-$3-$4-$5', '+7-$2-$3-$4-$5', '+7-$2-$3-$4', '+7-$2-$3-$4', ), $phone ); return $res; >

Результат:

/* Мобильные и городские */ +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 +7-495-123-45-67 /* Региональные */ +7-4734-12-34-56 +7-4735-123-456 /* С текстом */ +7-495-123-45-67 Иван +7-495-123-45-67 доп. 123 +7-495-123-45-67, +7 903 123-45-67 тел. +7-495-123-45-67 /* Номера с ошибками */ 495 1234567 8(8001234567 8800;1234567

Формат +7xxxxxxxxxx

function phone_format($phone) < $phone = trim($phone); $res = preg_replace( array( '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?\([-|\s]?(\d)[-|\s]?\)[-|\s]?(\d)[-|\s]?(\d)/', '/[\+]?([7|8])[-|\s]?(\d)[-|\s]?(\d)[-|\s]?(\d)/', ), array( '+7$2$3$4$5', '+7$2$3$4$5', '+7$2$3$4$5', '+7$2$3$4$5', '+7$2$3$4', '+7$2$3$4', ), $phone ); return $res; >

Результат:

/* Мобильные и городские */ +74951234567 +74951234567 +74951234567 +74951234567 +74951234567 +74951234567 +74951234567 +74951234567 +74951234567 /* Региональные */ +74734123456 +74735123456 /* С текстом */ +74951234567 Иван +74951234567 доп. 123 +74951234567, +7 903 123-45-67 тел. +74951234567

Источник

Читайте также:  Самая новая версия php

Сниппет для форматирования телефонных номеров

Задача. Есть большой список телефонных номеров, которые нужно переформатировать под единый формат (или форматы). Номера есть нескольких типов 7, 10 и 11 значные. Для каждого из этих типов необходимо вывести номер телефона в своем формате.

В php есть такие функции как money_format и number_format, но нет такой функции как phone_format, этот пробел я и решил восполнить написав такую функцию для форматирования телефонных номеров.

/** * Форматирование телефонного номера * по шаблону и маске для замены * * @param string $phone * @param string|array $format * @param string $mask * @return bool|string */ function phone_format($phone, $format, $mask = '#') < $phone = preg_replace('/[^0-9]/', '', $phone); if (is_array($format)) < if (array_key_exists(strlen($phone), $format)) < $format = $format[strlen($phone)]; >else < return false; >> $pattern = '/' . str_repeat('(8)?', substr_count($format, $mask)) . '(.*)/'; $format = preg_replace_callback( str_replace('#', $mask, '/([#])/'), function () use (&$counter) < return '$'; >, $format ); return ($phone) ? trim(preg_replace($pattern, $format, $phone, 1)) : false; > 

Использование

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

$phones = array( '926 111-2233', '9261112233', '8 (926) 111 22 33', '8 926 111-22-33', '559-8833', '5598833', '', 'qweqwe' ); $formats = array( '7' => '###-##-##', '10' => '+7 (###) ### ####', '11' => '# (###) ### ####' ); foreach ($phones AS $phone)

Результат выполнения радует глаз:

+7 (926) 111 2233 +7 (926) 111 2233 8 (926) 111 2233 8 (926) 111 2233 559-88-33 559-88-33 

Данный сниппет не ставит перед собой цель определить город, регион или какой-либо другой параметр. Кроме того возникнут проблемы при использовании шаблонов для номеров “8 (123) 111-22-33” и “+7 (123) 111-22-33”. Возможно потом придумаю как поступать с такими номерами.

Источник

tkachev-o / phone_format.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

/**
* Простая функция для вывода форматированного номера телефона по маске
*
*
* @param string $phone
* @param string $pattern
* @return string
*/
function phone_format ( $ phone , $ pattern = ‘+# (###) ### ##-##’ )
$ phone = preg_replace( ‘/[^0-9]/’ , » , $ phone );
$ phone = str_split( $ phone );
$ pattern = str_split( $ pattern );
$ output = » ;
$ i = 0 ;
foreach ( $ pattern as $ value )
if ( $ value === ‘#’ )
$ output .= $ phone [ $ i ++];
else
$ output .= $ value ;
>
return $ output ;
>
echo phone_format( ‘79197055585’ , ‘+# (###) ###-##-##’ );

Источник

Оцените статью