Skip to content

Instantly share code, notes, and snippets.

@maximal
Last active April 2, 2024 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save maximal/4a07f23c41b6aab491be07eb2f6a542b to your computer and use it in GitHub Desktop.
Save maximal/4a07f23c41b6aab491be07eb2f6a542b to your computer and use it in GitHub Desktop.
Format phone number
/**
* Отформатировать телефонный номер.
*
* Для мобильных код отбивается пробелами, для домашних — скобками.
*
* Грамотно обрабатываются только русские номера,
* для остальных функция пытается отформатировать более-менее нормально.
*
* Для отбивания цифр используются не просто дефисы, а специальные цифровые чёрточки, не хухры.
*
* Примеры:
* * 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');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment