Проверка телефона Angular2/4

Я пытаюсь реализовать форму в Angular 2/4. Есть поле для номера телефона. Я использовал регулярное выражение как

pattern="^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$"

в соответствующем поле ввода. Он принимает почти все форматы, но не следующие:

  1. 754-3010 (местный)

  2. (541) 754-3010 (внутренний)

  3. +1-541-754-3010 (международный)

Более того, он должен принимать символы +, -, ( и ).

Надеюсь, кто-то может помочь


person Anoop Surendran    schedule 26.09.2017    source источник


Ответы (1)


Вы можете сделать часть регулярного выражения необязательной, используя необязательную группу без захвата.

Использовать

^\s*(?:\+?\d{1,3})?[- (]*\d{3}(?:[- )]*\d{3})?[- ]*\d{4}(?: *[x/#]\d+)?\s*$
                              ^^^           ^^

См. демонстрацию регулярного выражения.

Обратите внимание, что {1} является избыточным, вы можете удалить его.

Что касается групп захвата, вы можете оставить свои исходные, если они вам нужны, но если вы просто проверяете, я бы предпочел их удалить.

Подробнее

  • ^ - начало строки
  • \s* - 0+ пробелов
  • (?:\+?\d{1,3})? - an optional sequence of:
    • \+? - an optional (1 or 0) + symbol
    • \d{1,3} - любые цифры от 1 до 3
  • [- (]* - -, пробел или (
  • \d{3} - любые 3 цифры
  • (?:[- )]*\d{3})? - an optional sequence of:
    • [- )]* - 0+ -, spaces or )
    • \d{3} - любые 3 цифры
  • [- ]* - 0+ пробелов или -
  • \d{4} - любые 4 цифры
  • (?: *[x/#]\d+)?
  • \s* - 0+ пробелов
  • $ - конец строки.
person Wiktor Stribiżew    schedule 27.09.2017
comment
Отличное объяснение! Большое спасибо за это. - person Anoop Surendran; 28.09.2017