ИНСТР-REGEX-PHONEE.164 / российские форматыFrontend / Backendревизия 2026-05-07

Regex для телефона РФ

Готовые регулярки для проверки российских телефонов: +7, 8, мобильные 9XX, городские. Нормализация и форматирование.

⏱ работает в браузере · без регистрации
Инструмент · ИНСТР-REGEX-PHONE|real-time
calcal.ru / regex-telefon-rossiya
Загрузка...
11
Цифр в номере
+7
Международный код
9XX
Мобильные
0
Запросов к серверу

Готовые шаблоны

Российский телефон — 11 цифр, начинающихся с 7 или 8. Все операторы используют 3-значный код после префикса. Базовый regex покрывает 99% реальных номеров с минимальной сложностью.

Шаблон 1 — простой (без форматирования)

^(?:\+7|7|8)\d{10}$

Принимает только числа без пробелов и скобок: 89261234567, 79261234567, +79261234567. Для пользовательского ввода — сначала очистите строку от нецифровых символов.

Шаблон 2 — с форматированием (универсальный)

^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$

Принимает форматы: +7 (495) 123-45-67, 8-926-123-45-67, +7 495 1234567, 8(495)1234567. Учитывает скобки, пробелы, дефисы между группами цифр.

Шаблон 3 — только мобильные

^(?:\+7|7|8)9\d{9}$

Только мобильные (код начинается с 9). Жёстко: исключает городские номера (495, 812 и др.). Используйте, когда нужны только сотовые для SMS.

Российская система нумерации построена по стандарту E.164: код страны (7) + 3-значный код зоны или мобильного оператора + 7-значный абонентский номер. Общая длина — 11 цифр включая код страны.Технические условия Россвязь, 2017

Коды операторов

Мобильные (все начинаются с 9)

  • МТС: 910-919, 980-989, +новые после MNP
  • Билайн: 903-906, 909, 951, 953-961, 963, 965-968
  • Мегафон: 920-928, 936, 937, 999
  • Tele2: 900, 902, 904, 908, 950, 952, 991-994
  • Yota: 999 (виртуальный оператор Мегафона)
  • Тинькофф Мобайл: 991-994 (виртуальный)

После 2017 года ввели MNP (Mobile Number Portability) — пользователь может перенести номер от одного оператора к другому, сохранив его. Поэтому код больше НЕ гарантированно указывает на оператора. Чтобы определить реального оператора — используйте платные API (например, Numverify, Twilio Lookup).

Городские коды (примеры)

  • Москва: 495, 499 (после 495 → 7 цифр)
  • СПб: 812 (после → 7 цифр)
  • Новосибирск: 383
  • Екатеринбург: 343
  • Казань: 843
  • Самара: 846
  • Уфа: 347

Региональные коды могут быть 3-5 цифр. Длина абонентского номера — 5-7 цифр в зависимости от размера города.

Нормализация формата

Хранение в БД должно быть в едином формате. Стандарт — E.164: +79261234567 (плюс + 11 цифр) или 79261234567 (без плюса). При вводе принимайте любой формат, потом нормализуйте:

JavaScript

function normalizePhoneRu(input) {
  // 1. Убираем всё кроме цифр
  let digits = input.replace(/\D/g, '');

  // 2. Если 11 цифр и начинается с 8 - меняем на 7
  if (digits.length === 11 && digits[0] === '8') {
    digits = '7' + digits.slice(1);
  }

  // 3. Если 10 цифр - добавляем 7 в начало
  if (digits.length === 10) {
    digits = '7' + digits;
  }

  // 4. Проверка валидности
  if (digits.length !== 11 || digits[0] !== '7') {
    return null; // невалидный
  }

  return digits; // 79261234567
}

function formatPhoneRu(digits) {
  // 79261234567 → +7 (926) 123-45-67
  return `+7 (${digits.slice(1, 4)}) ${digits.slice(4, 7)}-${digits.slice(7, 9)}-${digits.slice(9)}`;
}

Python

import re

def normalize_phone_ru(input_str):
    digits = re.sub(r'\D', '', input_str)
    if len(digits) == 11 and digits[0] == '8':
        digits = '7' + digits[1:]
    if len(digits) == 10:
        digits = '7' + digits
    if len(digits) != 11 or digits[0] != '7':
        return None
    return digits

def format_phone_ru(digits):
    return f"+7 ({digits[1:4]}) {digits[4:7]}-{digits[7:9]}-{digits[9:11]}"

Лучшие практики

  • Не блокируйте пользователя. Принимайте любой формат, нормализуйте на бэкенде. Жёсткая фронтенд-валидация раздражает.
  • Используйте input mask. imask.js, react-input-mask — пользователь видит формат +7 (___) ___-__-__ при вводе.
  • Type="tel" в HTML. На мобильных открывает цифровую клавиатуру, не QWERTY.
  • Подтверждение SMS. Реальная валидация — отправить код. Любая regex говорит только «формат правильный».
  • Кириллические буквы. Иногда пользователи случайно вводят «8 (4З5) 1З4-56-78» — буквы похожи на цифры. Очищайте все нецифровые символы.
  • Международная поддержка. Если работаете не только с РФ — используйте libphonenumber вместо собственных регексов.
ИСТОЧНИКИ
  1. E.164 — The international public telecommunication numbering plan. ITU-T. itu.int/rec/T-REC-E.164. 2010.
  2. libphonenumber — Google's phone number library. Google. github.com/google/libphonenumber. 2024.
  3. Россвязь — план нумерации сетей связи общего пользования. Россвязь. rossvyaz.gov.ru. 2024.
ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

Самый универсальный regex: <code>^(\+7|7|8)?[\s\-]?\(?[489][0-9]{2}\)?[\s\-]?[0-9]{3}[\s\-]?[0-9]{2}[\s\-]?[0-9]{2}$</code>. Принимает все форматы: +7 (495) 123-45-67, 89261234567, 7-926-123-45-67. После проверки формата — нормализуйте к единому виду 7XXXXXXXXXX (без + и пробелов) для хранения в БД.
Технически — оба означают «звонок в Россию». +7 — международный формат (E.164), 8 — устаревший внутренний префикс выхода на междугороднюю связь. С 2010 года в России можно набирать оба варианта. ВНИМАНИЕ: 8-800 (бесплатные номера) — это не +7-800, в международном формате они становятся +7-800. SMS-провайдеры могут не принять 8XX, требуют +7XX.
Все мобильные операторы в России используют 3-значный код, начинающийся на 9: 9XX. МТС — 910-919, 980-989. Билайн — 903-906, 909, 951, 953-961, 963, 965-968. Мегафон — 920-928, 936, 937, 999. Tele2 — 900, 902, 904, 908, 950, 952, 991-994. Yota — 999. После реформы 2017 года коды активно перераспределяются между операторами при переносе номера (MNP).
Городские: код города 3-5 цифр + номер. Москва — 495, 499 (всего 7 цифр после кода). СПб — 812. Региональные центры — 4XX-3XX. Маленькие города — 5-значный код. Полный паттерн сложен, потому что длина после кода может быть 5-7 цифр. Для большинства бизнес-форм нужны только мобильные — упрощайте до проверки 9XX.
Шаги: (1) Уберите все нецифровые символы: <code>str.replace(/\D/g, "")</code>. (2) Если начинается с 8 — замените на 7: <code>str.replace(/^8/, "7")</code>. (3) Если 11 цифр и начинается с 7 — это валидный российский. (4) Сохраняйте в БД в формате 7XXXXXXXXXX (11 цифр без +). При выводе пользователю — форматируйте: +7 (XXX) XXX-XX-XX.
Используйте библиотеку libphonenumber (Google) — Python: phonenumbers, JavaScript: libphonenumber-js, PHP: giggsey/libphonenumber. Они знают форматы всех 200+ стран, валидируют корректно, форматируют красиво. Regex для всех стран — невозможно, у каждой страны свои правила. Минус — библиотека весит 200KB+, для простых форм избыточно.
До 2010 года в России было много форматов: 8-916-XXX, 7-916-XXX (без +), местный без кода города (XXX-XX-XX). При парсинге старых данных: (1) Если 11 цифр начинается с 7 или 8 — это полный российский. (2) Если 10 цифр — добавьте 7 в начало (домашняя нумерация). (3) Если 7 цифр — это местный без кода города, нужен контекст откуда взяли (CRM с указанным городом). Для очистки CRM используйте Python скрипт с phonenumbers.
Стандарт для России: +7 (XXX) XXX-XX-XX. Алгоритм: убрать всё кроме цифр → если 11 цифр и начинается с 7 или 8 — отрезать первую → 10 цифр распределить +7 (XXX) XXX-XX-XX. Для печати на квитанциях/договорах — этот формат стандартен. Для SMS API — формат E.164 без скобок и пробелов: +79261234567.
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Профессиональные решения — медицинские, финансовые, инженерные — должны приниматься только после консультации с квалифицированным специалистом. Не используйте автоматический расчёт как единственное основание для важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут ответственности за прямой или косвенный ущерб, возникший из-за использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию результатов.