Вывести номер телефона в заданном формате
+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'));