Вывести номер телефона в заданном формате

+74950000000 как вывести этот номер в формате +7(495)000-00-00?


Ответы (3 шт):

Автор решения: Leonid

Очень прямолинейный и многосказательный вариант, но очевидный и простой!

let str = '+74950000000';

let plus_group = str.slice(0,2);
let code_group = str.slice(2,5);
let first_group = str.slice(5,8);
let second_group = str.slice(8,10);
let third_group = str.slice(10,12);

let correct_phone = plus_group + '(' + code_group + ')' + first_group + '-' + second_group + '-' + third_group;

console.log(correct_phone);

Можно использовать группы совпадений в регулярных выражениях:

let str = '+74950000000';

let gr = str.match(/(\+\d)(\d{3})(\d{3})(\d{2})(\d{2})/);
let correct_phone = gr[1] + '(' + gr[2] + ')' + gr[3] + '-' + gr[4] + '-' + gr[5];

console.log(correct_phone);

Можно подойти к вопросу более системно и использовать массив заполняющих знаков и reduce для формирования строки:

let str = '+74950000000';
let signs = ['(',')','-','-'];

let groups = str.match(/(\+\d)(\d{3})(\d{3})(\d{2})(\d{2})/).slice(1,6);
let correct_phone = groups.reduce((str, gr, i)=> str + gr + (signs[i]||''),'');

console.log(correct_phone);

Или еще больше сократить выражение:

let str = '+74950000000';
let signs = ['(',')','-','-'];

let correct_phone = str.match(/(\+\d)(\d{3})(\d{3})(\d{2})(\d{2})/).slice(1,6).reduce((str, gr, i)=> str + gr + (signs[i]||''),'');

console.log(correct_phone);

→ Ссылка
Автор решения: Vadizar

Самый простой и короткий способ. Правда, не учитывает, введён ли номер с кодом, а также не учитывает 6-значный номер.

const validPhone = num => {
    return num.replace(/^(\d)(\d{3})(\d{3})(\d{2})(\d{2})$/, '+$1($2)$3-$4-$5')
}
console.log(validPhone('74950000000'))

→ Ссылка
Автор решения: Pilaton

Доработал решение @Vadizar, поправил работу с плюсом.

const validPhone = num => {
  return num.replace(/^\+?(\d)(\d{3})(\d{3})(\d{2})(\d{2})$/, '+$1($2)$3-$4-$5')
}
console.log(validPhone('74950000000'));
console.log(validPhone('+74950000000'));

→ Ссылка