-
-
Save redVi/c78d4fdd6a047535b8621f4723357d9b to your computer and use it in GitHub Desktop.
Format phone number
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Отформатировать телефонный номер. | |
* | |
* Для мобильных код отбивается пробелами, для домашних — скобками. | |
* | |
* Грамотно обрабатываются только русские номера, | |
* для остальных функция пытается отформатировать более-менее нормально. | |
* | |
* Для отбивания цифр используются не просто дефисы, а специальные цифровые чёрточки, не хухры. | |
* | |
* Примеры: | |
* * 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