web-dev-qa-db-ja.com

Angularjs ng-patternが次の正規表現で動作しないのはなぜですか?

何らかの理由で、初期化された値はフィールドに表示されませんが、ng-patternのない2番目のフィールドは機能します。何か案は?

    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>

Fiddle http://jsfiddle.net/wkzab/1/

16
Will

[〜#〜] update [〜#〜]

私はそれを少し調べましたが(実際に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 は、文字列全体が英数字である限り、任意の値を受け入れます。別のパターンでヘルプが必要な場合は、質問を更新してください。

19
Sam

私も同じ問題に直面していました。これを行うための回避策を見つけました。

コントローラでこのようなことをする必要があります。

$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/;(式を引用符で囲まないでください)

最後に

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

これで動作します。

42
Ved

はい、そうです!これは私に問題を引き起こしていました...引用符を残すことは私のためにそれを修正したものです。

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