Skip to content

Instantly share code, notes, and snippets.

@apisklov
Created December 4, 2018 12:59
Show Gist options
  • Save apisklov/327b21596a12f5c6733a3bc4001d5614 to your computer and use it in GitHub Desktop.
Save apisklov/327b21596a12f5c6733a3bc4001d5614 to your computer and use it in GitHub Desktop.
Форматирование телефонного номера
/**
* Отформатировать телефонный номер.
*
* Для мобильных код отбивается пробелами, для домашних — скобками.
*
* Грамотно обрабатываются только русские номера,
* для остальных функция пытается отформатировать более-менее нормально.
*
* Для отбивания цифр используются не просто дефисы, а специальные цифровые чёрточки, не хухры.
*
* Примеры:
* * 74722112233 → +7 (4722) 11‒22‒33
* * 84951112233 → +7 (495) 111‒22‒33
* * 89201112233 → +7 920 111‒22‒33
* * 19991112233 → +1999 111‒22‒33
* * 112233 → 112233
*
* @author MaximAL
* @since 2015-05-27
* @copyright © MaximAL, Sijeko 2015
*
* @param {string} phone Телефонный номер
* @returns {string} Возвращает отформатированный телефонный номер
*/
function formatPhone(phone) {
var digits = phone.replace(/^8/, '7').replace(/[^\d]+/, '');
if (digits.length < 11) {
return phone;
}
// Домашний?
if (digits.substr(0, 2) === '74') {
// Для белгородских (и похожих) домашних возвращаем нормальное форматирование
// Для остальных пытаемся
return digits.substr(0, 3) === '747' ?
digits.replace(/^(\d)(\d+)(\d\d)(\d\d)(\d\d)$/, '+$1 ($2) $3‒$4‒$5') :
digits.replace(/^(\d)(\d+)(\d\d\d)(\d\d)(\d\d)$/, '+$1 ($2) $3‒$4‒$5');
}
// Для русских мобильных возвращаем нормальное форматирование
// Для остальных пытаемся
return digits.substr(0, 2) === '79' ?
digits.replace(/^(\d)(\d+)(\d\d\d)(\d\d)(\d\d)$/, '+$1 $2 $3‒$4‒$5') :
digits.replace(/^(\d)(\d+)(\d\d\d)(\d\d)(\d\d)$/, '+$1$2 $3‒$4‒$5');
}
console.log(formatPhone('74724653153'));
console.log(formatPhone('74722665544'));
console.log(formatPhone('74951112233'));
console.log(formatPhone('+389601112233'));
console.log(formatPhone('79202039052'));
console.log(formatPhone('+79202039052'));
console.log(formatPhone('19991112233'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment