Формат номера телефона
Введите номер как угодно — получите все правильные записи для визитки, сайта, CRM и ссылок. Ниже — массовое форматирование списка, маска телефона для сайта и регулярные выражения.
Привести список номеров к одному формату
Как правильно писать номер телефона
| Где | Запись | Почему |
|---|---|---|
| Визитка, вывеска, реклама | +7 916 123 45 67 | Рекомендация ITU-T E.123: плюс, код страны, группы через пробел; скобки в международной записи стандарт не допускает |
| Сайт, подпись письма | +7 (916) 123-45-67 | Привычная в России запись: легко читается и диктуется; на сайте оберните её в ссылку tel:+79161234567 |
| CRM, база, рассылки, API | +79161234567 | Формат E.164: одна запись на номер, без пробелов — поиск, дедупликация и интеграции работают без ошибок |
| Только для звонков внутри России | 8 (916) 123-45-67 | Национальная запись: с иностранной SIM, из роуминга и в мессенджерах восьмёрка не сработает |
Российский номер — это +7, трёхзначный код и семь цифр. Код 9XX — мобильный, 3XX, 4XX и 8XX — городской (кроме федеральных 8-800 и платных 8-803…8-809), коды на 6 и 7 после +7 — Казахстан. Узнать регион и оператора по коду — в определителе, город — в кодах городов, страну — в кодах стран.
Маска телефона для сайта
Попробуйте — так будет работать поле на вашем сайте с кодом ниже:
Без библиотек (JavaScript)
// Маска +7 (XXX) XXX-XX-XX без библиотек: для всех полей type="tel"
document.querySelectorAll('input[type="tel"]').forEach(input => {
input.addEventListener('input', () => {
let d = input.value.replace(/\D/g, '');
if (d[0] === '8') d = '7' + d.slice(1); // 8 916… → +7 916…
if (d && d[0] !== '7') d = '7' + d; // 916… → +7 916…
d = d.slice(0, 11);
const [a, b, c, e] = [d.slice(1, 4), d.slice(4, 7), d.slice(7, 9), d.slice(9, 11)];
input.value = !d ? '' : '+7' + (a && ' (' + a) + (b && ') ' + b) + (c && '-' + c) + (e && '-' + e);
});
}); Поле формы (HTML)
<input type="tel" name="phone" autocomplete="tel" inputmode="tel"
placeholder="+7 (900) 000-00-00"
pattern="\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}" required> autocomplete="tel" позволяет браузеру подставить номер владельца, pattern проверяет формат
при отправке (атрибут неявно привязан к началу и концу строки, ^ и $ не нужны). Маска переставляет курсор в конец при
правке в середине — для полей номера это обычно не мешает.
С библиотеками
| Библиотека | Код |
|---|---|
| IMask | IMask(input, { mask: '+{7} (000) 000-00-00' }) |
| Inputmask | Inputmask('+7 (999) 999-99-99').mask(input) |
| Cleave.js (снят с поддержки) | new Cleave(input, { prefix: '+7', blocks: [2, 3, 3, 2, 2], delimiters: [' (', ') ', '-', '-'], numericOnly: true }) |
Регулярное выражение для номера телефона
| Что проверяет | Регулярное выражение |
|---|---|
| Нормализованный российский номер (E.164) Для базы и CRM: строго +7 и 10 цифр. | ^\+7\d{10}$ |
| Любой ввод российского номера Принимает 8 и +7, скобки, пробелы и дефисы. | ^(?:\+7|7|8)[\s(-]*\d{3}[\s)-]*\d{3}[\s-]*\d{2}[\s-]*\d{2}$ |
| Российский мобильный То же, но код начинается с 9. | ^(?:\+7|7|8)[\s(-]*9\d{2}[\s)-]*\d{3}[\s-]*\d{2}[\s-]*\d{2}$ |
| Любой международный номер (E.164) Плюс и от 8 до 15 цифр вместе с кодом страны. | ^\+[1-9]\d{7,14}$ |
Регулярное выражение отвечает только на вопрос «похоже ли на номер», но не «существует ли он». Для форм надёжнее сначала очистить ввод до цифр и привести к +7, а уже потом проверять длину и код — тогда клиент может написать номер как привык, а в базу попадёт единый формат.
Нужна кликабельная ссылка или QR-код с номером — генератор ссылок wa.me, t.me и tel:. А чтобы ни один звонок по этому номеру не потерялся, подключите Машу.
Вопросы и ответы
Как правильно писать номер телефона?
+7 или 8 — как лучше?
Что такое международный формат номера?
Как поставить маску телефона на сайт?
Какое регулярное выражение для номера телефона?
Как привести список номеров к одному формату?
Номера уходят на сервер?
Номер на визитке и сайте правильный. А кто на него ответит?
Когда вы заняты, Маша возьмёт трубку, выяснит, кто и зачем звонит, и пришлёт расшифровку в Telegram — клиент не уйдёт к конкуренту.