Как проверить номер телефона
Короткий ответ
Люди пишут телефоны с пробелами, скобками и дефисами. Уберите всё, кроме цифр и плюса в начале, а затем проверьте длину:
const normalizePhone = (value) => value.trim().replace(/(?!^\+)[^\d]/g, '');
const isPhone = (value) => /^\+?\d{7,15}$/.test(normalizePhone(value));
console.log(normalizePhone('+1 (555) 123-45-67'));
console.log(isPhone('+1 (555) 123-45-67'));
console.log(isPhone('12-34'));Результат:
+15551234567
true
falseМеждународный формат
Международный формат E.164 — плюс и до 15 цифр без ведущего нуля:
const isE164 = (value) => /^\+[1-9]\d{6,14}$/.test(value);
console.log(isE164('+15551234567'));
console.log(isE164('5551234567'));Результат:
true
falseЧастая ошибка
Строгий шаблон под одну страну отсекает телефоны других стран и обычные способы записи. Храните нормализованный номер и проверяйте только основное.
const tooStrict = /^\(\d{3}\) \d{3}-\d{4}$/;
console.log(tooStrict.test('(555) 123-4567'));
console.log(tooStrict.test('555 123 4567'));Результат:
true
falseФункции из этого ответа
- String.prototype.replace — Заменяет первое совпадение (или все — с флагом g у регулярного выражения).
- RegExp.prototype.test — Проверяет, есть ли в строке совпадение с шаблоном.