AngularJS ng-pattern [$ parse:lexerr] Lexer错误:意外的下一个字符

时间:2016-12-07 14:29:25

标签: angularjs regex ng-pattern

我在AngularJS中的正则表达式有点问题

我在html中的正则表达式如下:

ng-pattern="[adfijmPrsyz\d]+"

但我在控制台中收到错误消息:

angular.js:13920 Error: [$parse:lexerr] Lexer Error: Unexpected next character  at columns 12-12 [\] in expression [[adfijmPrsyz\d]+].

我的正则表达式应该达到这个目的:只有a,d,f,i,j,m,P,r,s,y,z和数字0到9才有效。

如果我可以在控制器中设置正则表达式而不是在html文件中对其进行硬编码,那将是很好的。

像这样:

private regex: any = /[adfijmPrsyz\d+]/;

<input name="REFZEILE" ng-pattern="regex" />

1 个答案:

答案 0 :(得分:1)

您实际上可以在控制器中定义正则表达式 - 您只需要使用new RegExp()。当使用正则表达式内联时,你必须通过将它括在引号中来告诉Angular它是一个字符串(在你的情况下单个,因为你在属性值上使用双引号),否则Angular会尝试将它作为变量进行计算。这是一个工作示例,显示了两种方法。

angular.module('app', ['ngMessages'])
  .controller('ctrl', function($scope) {
    $scope.regex = new RegExp(/^[adfijmPrsyz\d]+$/);
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-messages/1.5.9/angular-messages.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  <form name="testForm">
    Using controller RegExp:
    <input type="text" name="testInput" ng-model="testInput" ng-pattern="regex" required>
    <div ng-messages="testForm.testInput.$error" role="alert">
      <div ng-message="required">A value is required</div>
      <div ng-message="pattern">Value entered is not valid</div>
    </div>
    Using inline RegExp:
    <input type="text" name="testInput2" ng-model="testInput2" ng-pattern="'[adfijmPrsyz\d]+'" required>
    <div ng-messages="testForm.testInput2.$error" role="alert">
      <div ng-message="required">A value is required</div>
      <div ng-message="pattern">Value entered is not valid</div>
    </div>
  </form>
</div>