Regex для российского номера телефона

Категория: Регулярные выражения · Язык: JavaScript · Обновлено:

Если форма принимает только российские номера в формате +7XXXXXXXXXX или 8XXXXXXXXXX, можно проверить строку выражением /^(?:\+7|8)\d{10}$/. Сначала нормализуйте ввод, если хотите разрешить пробелы, скобки и дефисы.

Строгий формат без разделителей

JavaScript
const phonePattern = /^(?:\+7|8)\d{10}$/;
console.log(phonePattern.test('+79991234567')); // true
console.log(phonePattern.test('89991234567')); // true

Выражение принимает ровно один из двух префиксов и десять цифр после него.

Нормализовать форматированный ввод

JavaScript
function normalizeRussianPhone(value) {
  const digits = value.replace(/\D/g, '');
  if (digits.length === 11 && digits.startsWith('8')) return `+7${digits.slice(1)}`;
  if (digits.length === 11 && digits.startsWith('7')) return `+${digits}`;
  return null;
}
console.log(normalizeRussianPhone('8 (999) 123-45-67')); // +79991234567

После нормализации проверьте итоговый формат и сообщите пользователю понятную ошибку.

Формат ввода

Результат

+79991234567

Принят

8 (999) 123-45-67

Нормализуется в +79991234567

+7 999

Отклонён как неполный

Как разрешить только +7?

Уберите альтернативу 8 и используйте /^\+7\d{10}$/. Не удаляйте ведущую цифру до проверки длины и префикса.