16

由于某种原因,初始化值没有出现在字段中,但是没有 ng-pattern 的第二个字段确实有效。有任何想法吗?

    angular.module('app', []).controller('MainCtrl', function($scope) {
      $scope.widget = {title: 'abc', title2: 'abc'};
    });

    <div ng-app="app" ng-controller="MainCtrl">
     <input ng-model="widget.title" required ng-pattern="/[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/">
     <br /><br />   
     input 1: {{ widget.title }}
     <br /><br />   
     <input ng-model="widget.title2" required>
     <br /><br />   
     input 2: {{ widget.title2 }}
    </div>

这是小提琴 http://jsfiddle.net/wkzab/1/

4

3 回答 3

47

我也面临同样的问题。找到了解决方法来做到这一点。

你必须在你的控制器中做这样的事情。

$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/; (不要将表达式放在引号中)

最后

<input ng-model="widget.title" required ng-pattern="myRegex">

它现在可以工作了。

于 2014-08-25T11:12:33.417 回答
19

更新

我稍微研究了一下(从未真正使用过 Angular),通过使用name表单和输入上的属性,您可以获取一个错误,如我最新的JSFiddle中所示。其格式为:{{formName.inputName.$error}}. 这将返回一个参数等于布尔值的对象。当正则表达式出现错误时也会如此(因此您将显示错误{{form.title.$error.pattern}})。true我还将您的正则表达式清理(工作方式相同)为:/^[A-Z]{4}\d{6}[A-Z\d]{3}$/i


老的

ng-pattern属性尝试根据以下正则表达式匹配字段:/[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/。这转换为 4 个字母字符、6 个数字和 3 个字母数字字符。一旦你有一个匹配的模式,它就会出现。

您应该能够删除该ng-pattern属性或将表达式更改为不太具体。例如,只要整个字符串是字母数字,这个JSFiddle就可以接受任何值。如果您需要其他模式的帮助,请更新问题。

于 2014-04-09T03:18:31.133 回答
1

确实是的!这给我带来了一个问题……不加引号是为我解决的问题。

 $scope.regVal= /([A-Z]{3}\s?(\d{3}|\d{2}|d{1})\s?[A-Z])|([A-Z]\s?(\d{3}|\d{2}|\d{1})\s?[A-Z]{3})|(([A-HK-PRSVWY][A-HJ-PR-Y])\s?([0][2-9]|[1-9][0-9])\s?[A-HJ-PR-Z]{3})/;
于 2016-08-08T22:06:50.943 回答