我在输入中有以下内容,它可以正常工作
ng-pattern="/^\d{0,9}(\.\d{1,3})?$/">
我也通过validation.decfield下的JSON对象获得相同的模式,但是如果我这样做的话。
ng-pattern="validation.decField">
它不起作用......我已经看过其他人这样做的例子......为什么它不起作用?我正在使用角度1.3。
来自json的validation.decField的数据类型是String。我尝试了几种方法来转换它,以便Angular可以理解它。没有错误,它只是像字段中的普通模式一样限制字段。
答案 0 :(得分:1)
如果你确保在控制器中使用JavaScript正则表达式作为类型(而不是引用的模式),那么一切都应该没问题。
如果您正在接收正则表达式作为字符串(在JSON中),您应该构造一个新的RegExp
对象:
validation.decField = new RegEx('/^\d{0,9}(\.\d{1,3})?$/', 'i');
下面是显示一切正常的片段(使用Angular 1.2.23)。
请注意,示例中decField
设置为/^\d{0,9}(\.\d{1,3})?$/
,而不是'/^\d{0,9}(\.\d{1,3})?$/'
。
var app = angular.module('myApp', []);
app.controller('Ctrl', function($scope) {
$scope.validation = {
decField: new RegExp('/^\d{0,9}(\.\d{1,3})?$/', 'i')
};
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="Ctrl">
<form name="frm">
<label>Decimal:</label>
<input type="text" ng-model="myDecimal" ng-pattern="validation.decField"/>
</form>
{{ frm.$valid }}
</div>
</div>
&#13;