使用AngularJS和ng-pattern获取Lexer错误

时间:2016-10-03 18:13:22

标签: javascript angularjs regex

我在运行时遇到以下错误:

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

我的HTML看起来像这样

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

我的AngularJS控制器中的赋值如下:

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

根据我的理解,AngularJS在正则表达式的开头和结尾追加^和$,效果很好。问题是表达式中间的正则表达式字面值未被接受。我想要点作为文字,而不是任何角色,所以我需要一种方法来逃避它,但词法分析者不喜欢它。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

此问题已经报告here,但他们不会修复它,因为它们是一个不常见的用例。

请这样做:

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

这样,正则表达式将被评估为正则表达式对象,而不是RegExp的字符串参数,在这种情况下,我们需要添加^$