- Регистрация
- 30.10.2014
- Сообщения
- 45
- Благодарностей
- 16
- Баллы
- 8
Добрый день!
Задача такая: есть номера телефонов без пробелов, номера начинаются с +7 и 8 , мне нужно перед постингом сделать форматирование в 8 (987) 654-32-10 или +7 (987) 654-32-10
у меня был скрипт пхп, может кто на JS или C# замутит:
Если есть более простой способ, буду благодарен!
Задача такая: есть номера телефонов без пробелов, номера начинаются с +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('[' => '', ']' => '')); // вырезаем знаки необязательности
}