Getting Lexer Error with AngularJS and ng-pattern

I’m getting the following error at runtime:

Error: [$parse:lexerr] Lexer Error: Unexpected next character  at columns 11-11 [] in expression [[0-9]{1,4}(.[0-9]{1,3})?].

My HTML looks like this

<input type="text"
  class="form-control"
  name="amount"
  ng-pattern="{{ctrl.pattern}}"
  ng-model="ctrl.amount">

The assignment in my AngularJS controller is as follows:

ctrl.pattern = '[0-9]{1,4}(\.[0-9]{1,3})?';

From what I understand AngularJS appends the ^ and $ at the beginning and end of regular expressions and that works great. The problem is that the regex literal in the middle of the expression is not being accepted. I want to dot to be accepted as a literal and not as any character so I need a way to escape it yet the lexer does not to like it. Is there a way around this?

Answer

This issue is already reported here but they are not going to fix it as according to them its a uncommon usecase.


Do it this way instead:

ctrl.pattern = /^[0-9]{1,4}([.][0-9]{1,3})?$/;

This way the regex will be evaluated as a regex object instead of a string parameter to RegExp in which case we will need to add ^,$

Leave a Reply

Your email address will not be published. Required fields are marked *