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

时间:2014-04-09 03:10:49

标签: javascript angularjs regex 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>

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

3 个答案:

答案 0 :(得分: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">

它现在正在运作。

答案 1 :(得分:19)

<强>更新

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


<强> OLD

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

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

答案 2 :(得分:0)

确实是的!这让我有一个问题......把引号留下来就是为我修好了。

 $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})/;