Регулярное выражение ng-шаблона AngularJs

Я изо всех сил пытаюсь написать Regex для углового ng-шаблона для проверки поля ввода формы. Пример возможных входных данных приведен ниже.

Допустимый ввод:

@tag1,@tag2,@tag3
@tag1, @tag2, @tag3
@tag1

Неверный Ввод:

@tag 1
@tag 1, @tag2, @tag  -3
@ta g1, @t ag2

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

Я написал REGEX, который соответствует всем недопустимым вводам, но когда я использую это в ng-шаблоне, он не выполняет правильную проверку.

Построено регулярное выражение: /((^, @|@\s+)|@*[a-zA-Z0-9]* +[a-zA-Z0-9])/g Ссылка: https://regex101.com/r/HMVdLD/1

Любая помощь высоко ценится!


person Steven.lin    schedule 13.04.2017    source источник
comment
Зачем использовать регулярное выражение, которое соответствует недопустимому вводу?   -  person Wiktor Stribiżew    schedule 13.04.2017
comment
Я попытался отрицать приведенное выше выражение. Это тоже не работает.   -  person Steven.lin    schedule 13.04.2017
comment
Посмотрите, /^@[a-zA-Z0-9]+(?:,\s*@[a-zA-Z0-9]+)*$/ должны соответствовать всем допустимым, и это намного проще. Поместите его в значение атрибута ng-pattern (ng-pattern="/pattern/"). Как насчет начальных/конечных пробелов? Вы хотите, чтобы это было разрешено в вашем поле ввода?   -  person Wiktor Stribiżew    schedule 13.04.2017


Ответы (1)


Я предлагаю определить шаблон для соответствия допустимым вводам, например

ng-pattern="/^@[a-zA-Z0-9]+(?:,\s*@[a-zA-Z0-9]+)*$/"

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

Если вы хотите запретить начальные и конечные пробелы, добавьте ng-trim="false".

Сведения о шаблоне:

  • ^ - начало строки
  • @ - буквальный символ @
  • [a-zA-Z0-9]+ - 1+ буквенно-цифровые символы
  • (?:,\s*@[a-zA-Z0-9]+)* - 0+ sequences of:
    • , - comma
    • \s* - 0+ пробелов
    • @[a-zA-Z0-9]+ - то же, что и выше
  • $ - конец строки.
person Wiktor Stribiżew    schedule 13.04.2017