何らかの理由で、初期化された値はフィールドに表示されませんが、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/
[〜#〜] 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 は、文字列全体が英数字である限り、任意の値を受け入れます。別のパターンでヘルプが必要な場合は、質問を更新してください。
私も同じ問題に直面していました。これを行うための回避策を見つけました。
コントローラでこのようなことをする必要があります。
$scope.myRegex = /[a-zA-Z]{4}[0-9]{6,6}[a-zA-Z0-9]{3}/;
(式を引用符で囲まないでください)
最後に
<input ng-model="widget.title" required ng-pattern="myRegex">
これで動作します。
はい、そうです!これは私に問題を引き起こしていました...引用符を残すことは私のためにそれを修正したものです。
$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})/;