一尘不染

为什么Angularjs ng-pattern无法与以下正则表达式一起使用?

angularjs

由于某种原因,初始化值不会出现在字段中,但是没有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/


阅读 307

收藏
2020-07-04

共1个答案

一尘不染

更新

我仔细研究了一下(从未真正使用过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将接受任何值。如果您需要其他模式的帮助,请更新问题。

2020-07-04