Допустимые выражения регулярных выражений не будут работать с AngularJS - PullRequest
0 голосов
/ 21 декабря 2018

Я хотел бы проверить правильность ввода данных для телефонных номеров в двух форматах:

  • 01 1234567 (два числа, пробел, семь цифр)
  • + 12123 123 123 123 (знак плюс, два числа, пробел, три числа, пробел, три числа, пробел, три числа
  • без символов вообще (без ввода)

Я написал регулярное выражение для этого [0-9] {2} [0-9] {3} [0-9] {3} [0-9] {3} | [0-9] {2} [0-9] {7} | . Работает при проверке с помощью онлайн-проверок регулярных выражений, но не работает (пользователь может писать все, что хочет) при использовании с AngularJS: ng-pattern="[0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3}|[0-9]{2} [0-9]{7}|".

1 Ответ

0 голосов
/ 21 декабря 2018

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

ng-pattern="/^(?:\+[0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3}|[0-9]{2} [0-9]{7})?$/"
            ^^                                                           ^^

Или, немного короче:

ng-pattern="/^(?:\+[0-9]{2}(?: [0-9]{3}){3}|[0-9]{2} [0-9]{7})?$/"

Если вы задаетешаблон в файле JS в качестве переменной используется

var mypattern = /^(?:\+[0-9]{2}(?: [0-9]{3}){3}|[0-9]{2} [0-9]{7})?$/;

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

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

Подробности

  • ^ - начало строки
  • (?: - начало необязательного захватагруппа:
    • \+ - + char
    • [0-9]{2} [0-9]{3} [0-9]{3} [0-9]{3} (равно [0-9]{2}(?: [0-9]{3}){3}) - 2 цифры, а затем 3 вхождения пробела, 3 цифры
  • | - или
    • [0-9]{2} [0-9]{7} - 2 цифры, пробел, 7 цифр
  • )? - конец дополнительногогруппа
  • $ - конец строки.
...