ng-pattern给出" Lexer错误"?

时间:2015-07-02 15:00:21

标签: javascript regex angularjs

作为输入元素的属性我有:

ng-pattern="^\d{5}(?:[-\s]\d{4})?$"

这个表达方式错了吗?

我收到此错误:

Lexer Error: Unexpected next character  at columns 0-0 [^] in expression [^\d{5}(?:[-\s]\d{4})?$].

4 个答案:

答案 0 :(得分:28)

尝试在/之前和^之后添加$

<强> E.g。

ng-pattern="/^\d{5}(?:[-\s]\d{4})?$/"

希望它有所帮助!

答案 1 :(得分:5)

默认情况下,angularjs使用^$符号包装正则表达式。删除那些。

来自代码的片段:

var f, g = d.ngPattern || d.pattern;
d.$observe("pattern", function(a) {
     C(a) && 0 < a.length && (a = new RegExp("^" + a + "$"));

答案 2 :(得分:2)

如果你想把你的正则表达式放在代码中,而不是html:

在控制器中:

function SomeController() {
    var vm = this;

    vm.regex = /^\d{5}(?:[-\s]\d{4})?$/.source;
}

在html中(假设您的控制器别名为“ctrl”):

ng-pattern="ctrl.regex"

答案 3 :(得分:0)

如果有人遇到类似的问题: Lexer错误:表达式[#sts。#Contact]

中第7-7列[#]处出现意外的下一个字符

使用:

控制器:

app.controller('XXController',
    function($rootScope, $scope, $q, XXService, configuration, constants) {

    $scope.consts = constants.constants;
    //...
});

<强> constants_en.json:

{

 "#Contact":"Contact Details",
...

}

<强> HTML:

<label for="contact">{{ consts.#Contact }} </label>

解决方案:在HTML中使用以下内容:

<label for="customer">{{ consts['#Contact'] }}</label>