[解決済み] Angularjs動的ngパターン検証
質問
チェックボックスがfalseの場合、ng-requiredディレクティブを使用してテキスト入力のバリデーションを強制するフォームがあります。 チェックボックスがtrueの場合、フィールドは隠され、ng-requiredはfalseに設定されます。
問題は、ng-pattern angularディレクティブを使用して、入力に指定された検証用の正規表現も持っていることです。 私が遭遇している問題は、ユーザーが無効な電話番号を入力し、その入力を無効にするボックスをチェックした場合 (その結果、さらなる検証は必要ありません)、ng-pattern に基づいて無効であるため、フォームが送信できないことです。
入力モデルを null に設定する ng-change 関数を追加してこの問題を解決しようとしましたが、チェックボックスを false に初期設定しても ng-pattern とフィールドは無効と設定されたままです。 しかし、ボックスのチェックを外し、すべてを最初のフォームロードに設定し、再度ボックスをチェックすると、フォームは有効で送信することができます。 何が足りないのかよくわかりません。 以下は、私がこれまでに作成したng-changeのコードです。
var phoneNumberRegex = /^\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})$/;
$scope.phoneNumberPattern = phoneNumberRegex;
$scope.removeValidation = function() {
if ($scope.cell._newUser === false) {
$scope.request._number = '';
$scope.phoneNumberPattern = /[0-9a-zA-Z]?/;
} else {
$scope.phoneNumberPattern = phoneNumberRegex;
}
};
どのように解決するのですか?
これは興味深い問題で、複雑なAngularのバリデーションです。次のフィドルは、あなたが望むものを実装しています。
詳細
新しいディレクティブを作りました。
rpattern
これは Angular の
ng-required
と
ng-pattern
のコードを
input[type=text]
. これは
required
属性を監視し、 正規表現で検証する際にそれを考慮することです。 たとえば、必須でない場合はフィールドを
valid-pattern
.
注意事項
- コードのほとんどは、このニーズに合わせて調整されたAngularのものです。
- チェックボックスにチェックを入れると、そのフィールドは必須となります。
- requiredチェックボックスがfalseの場合、フィールドは非表示になりません。
- 正規表現はデモ用に簡略化しています(有効は3桁)。
A 汚い (しかし、より小さい) 解決策は、新しいディレクティブを必要としない場合、次のようなものです。
$scope.phoneNumberPattern = (function() {
var regexp = /^\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})$/;
return {
test: function(value) {
if( $scope.requireTel === false ) {
return true;
}
return regexp.test(value);
}
};
})();
そして、HTMLでは何の変更も必要ありません。
<input type="text" ng-model="..." ng-required="requireTel"
ng-pattern="phoneNumberPattern" />
これは実際にはangularを騙して
私たちの
test()
メソッドの代わりに
RegExp.test()
の代わりに
required
を考慮しています。
関連
-
[解決済み] 適用がすでに進行中のエラー
-
angularjs統合ueditor入門
-
[解決済み] AngularJSのコントローラを指定する:ngControllerと$routeProviderを使用する利点
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み】AngularJSのディレクティブスコープにおける「@」と「=」の違いは何ですか?
-
[解決済み] AngularJSのフォームにカスタム検証を追加するには?
-
[解決済み] AngularJSでフォームの入力を条件付きで要求するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angular ui-routerで$stateメソッドを$stateChangeStart toStateとfromStateで使用する。
-
[解決済み] angularJSのSTATEを理解する
-
[解決済み] 適用がすでに進行中のエラー
-
[解決済み] Angular ng-repeat エラー "リピータ内の重複は許可されません。"
-
[解決済み] AngularJSの.$uibModalとは何ですか?
-
[解決済み] data-ng-file-selectが動作しないのはなぜですか?
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
[解決済み] Angular JSによるシンプルなポップアップ
-
[解決済み] angular.serviceとangular.factoryの比較
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング