ng-pattern动态对象属性

时间:2014-10-11 20:02:58

标签: angularjs

我在输入中有以下内容,它可以正常工作

ng-pattern="/^\d{0,9}(\.\d{1,3})?$/">

我也通过validation.decfield下的JSON对象获得相同的模式,但是如果我这样做的话。

ng-pattern="validation.decField">

它不起作用......我已经看过其他人这样做的例子......为什么它不起作用?我正在使用角度1.3。

来自json的validation.decField的数据类型是String。我尝试了几种方法来转换它,以便Angular可以理解它。没有错误,它只是像字段中的普通模式一样限制字段。

1 个答案:

答案 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;
&#13;
&#13;