为什么Angularjs ng-pattern不能使用以下正则表达式?

Wil*_*ill 16 javascript regex angularjs angularjs-scope angularjs-model

由于某种原因,初始值不会出现在字段中,但没有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>
Run Code Online (Sandbox Code Playgroud)

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

Ved*_*Ved 42

我也面临同样的问题.找到了解决方法来执行此操作.

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

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

最后

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

它现在将起作用.

  • 哎呀!花了一个小时试图弄清楚为什么模式不起作用.我把它直接放在属性`pattern`然后`ng-pattern`中.他们真的需要更好地记录它.谢谢! (6认同)
  • 感谢您提到不要将其放在引号中 - 这是我的问题 (2认同)

Sam*_*Sam 19

UPDATE

我稍微调查了一下(从未真正使用过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就会接受任何值.如果您需要有关其他模式的帮助,请更新问题.