Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить номер телефона

Короткий ответ

Люди пишут телефоны с пробелами, скобками и дефисами. Уберите всё, кроме цифр и плюса в начале, а затем проверьте длину:

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 — Проверяет, есть ли в строке совпадение с шаблоном.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.