我在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" />
答案 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>