Вам необходимо определить регулярное выражение, которое будет соответствовать всей строке, соответствующей вашим шаблонам, в качестве дополнительных шаблонов:
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 цифр
)?
- конец дополнительногогруппа $
- конец строки.