Regex для российского номера телефона
Если форма принимает только российские номера в формате +7XXXXXXXXXX или 8XXXXXXXXXX, можно проверить строку выражением /^(?:\+7|8)\d{10}$/. Сначала нормализуйте ввод, если хотите разрешить пробелы, скобки и дефисы.
Строгий формат без разделителей
const phonePattern = /^(?:\+7|8)\d{10}$/;
console.log(phonePattern.test('+79991234567')); // true
console.log(phonePattern.test('89991234567')); // trueВыражение принимает ровно один из двух префиксов и десять цифр после него.
Нормализовать форматированный ввод
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После нормализации проверьте итоговый формат и сообщите пользователю понятную ошибку.
Формат ввода | Результат |
|---|---|
| Принят |
| Нормализуется в |
| Отклонён как неполный |
Как разрешить только +7?
Уберите альтернативу 8 и используйте /^\+7\d{10}$/. Не удаляйте ведущую цифру до проверки длины и префикса.