Last active
August 2, 2024 02:19
-
-
Save maximal/4a07f23c41b6aab491be07eb2f6a542b to your computer and use it in GitHub Desktop.
Format phone number
This file contains 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