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

kolbassay

Client
Регистрация
30.10.2014
Сообщения
45
Благодарностей
16
Баллы
8
Добрый день!
Задача такая: есть номера телефонов без пробелов, номера начинаются с +7 и 8 , мне нужно перед постингом сделать форматирование в 8 (987) 654-32-10 или +7 (987) 654-32-10

у меня был скрипт пхп, может кто на JS или C# замутит:
PHP:
function phone($number, $format = '[1] [(3)] 3-2-2'){
$plus = ($number[0] == '+'); // есть ли +
$number = preg_replace('/\D/', '', $number); // убираем все знаки кроме цифр

$len = array_sum(preg_split('/\D/', $format)); // получаем сумму чисел из $format
$params = array_reverse(str_split($number)); // разбиваем $number на цифры и переворачиваем массив
$params += array_fill(0, $len, 0); // забиваем пустаты предыдущего массива нулями

$format = strrev(preg_replace_callback('/(\d)/m', function($m){return str_repeat('d%', $m[1]);}, $format)); // делаем форматированную строку и переворачиваем её

$format = call_user_func_array('sprintf', array_merge(array($format), $params)); // заполняем строку цирами
$format = ($plus ? '+' : '').strrev($format); // возвращаем строку в нормальное положение и прилепляем + обратно, если он был

if (preg_match_all('/\[(.*?)\]/', $format, $match)) // тут чистим от необязательных кусков
for ($i = 0, $c = count($match[0]); $i < $c; $i++)
if (!(int)preg_replace('/\D/', '', $match[1][$i]))
$format = str_replace($match[0][$i], '', $format);

return strtr(trim($format), array('[' => '', ']' => '')); // вырезаем знаки необязательности
}
Если есть более простой способ, буду благодарен!
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
Добрый день!
Задача такая: есть номера телефонов без пробелов, номера начинаются с +7 и 8 , мне нужно перед постингом сделать форматирование в 8 (987) 654-32-10 или +7 (987) 654-32-10

у меня был скрипт пхп, может кто на JS или C# замутит:
PHP:
function phone($number, $format = '[1] [(3)] 3-2-2'){
$plus = ($number[0] == '+'); // есть ли +
$number = preg_replace('/\D/', '', $number); // убираем все знаки кроме цифр

$len = array_sum(preg_split('/\D/', $format)); // получаем сумму чисел из $format
$params = array_reverse(str_split($number)); // разбиваем $number на цифры и переворачиваем массив
$params += array_fill(0, $len, 0); // забиваем пустаты предыдущего массива нулями

$format = strrev(preg_replace_callback('/(\d)/m', function($m){return str_repeat('d%', $m[1]);}, $format)); // делаем форматированную строку и переворачиваем её

$format = call_user_func_array('sprintf', array_merge(array($format), $params)); // заполняем строку цирами
$format = ($plus ? '+' : '').strrev($format); // возвращаем строку в нормальное положение и прилепляем + обратно, если он был

if (preg_match_all('/\[(.*?)\]/', $format, $match)) // тут чистим от необязательных кусков
for ($i = 0, $c = count($match[0]); $i < $c; $i++)
if (!(int)preg_replace('/\D/', '', $match[1][$i]))
$format = str_replace($match[0][$i], '', $format);

return strtr(trim($format), array('[' => '', ']' => '')); // вырезаем знаки необязательности
}
Если есть более простой способ, буду благодарен!

Код:
(\+7|8)(\d{3})(\d{3})(\d{2})(\d{2})
$1 ($2) $3-$4-$5
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)