Search code examples
javascriptangularjsregexng-pattern

AngularJs ng-pattern regex


I am struggling writing a Regex for angular ng-pattern to validate a form input field.An example of the possible inputs are below

Valid input:

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

Invalid Input:

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

Basically it should allow comma and comma whitespace, but not allow whitespace in between tags.

I have written a REGEX that matches all the invalid input, but when I use this in ng-pattern it does not do the correct validation.

Regex Built: /((^, @|@\s+)|@*[a-zA-Z0-9]* +[a-zA-Z0-9])/g Link: https://regex101.com/r/HMVdLD/1

Any help is much appreciated!


Solution

  • I suggest defining a pattern to match valid inputs, like

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

    See the regex demo

    If you want to disallow leading and trailing whitespace, add ng-trim="false".

    Pattern details:

    • ^ - start of string
    • @ - a literal @ symbol
    • [a-zA-Z0-9]+ - 1+ alphanumerics
    • (?:,\s*@[a-zA-Z0-9]+)* - 0+ sequences of:
      • , - comma
      • \s* - 0+ whitespaces
      • @[a-zA-Z0-9]+ - same as above
    • $ - end of string.