現在、ionic 2(Angular 2))で単純なフォームを書いています。検証に単純な 正規表現 パターンをどのように追加するのか疑問に思っていました。
私は基本的にこれを持っています:
<form>
<ion-input stacked-label>
<ion-label>{{label.msisdn}}</ion-label>
<input type="text"
[(ngModel)]="msisdn"
ngControl="msisdnForm"
required
maxlength="10"
minlength="10"
pattern="06([0-9]{8})"
#msisdnForm="ngForm"
>
</ion-input>
<button [disabled]="!msisdnForm.valid" block (click)="requestActivationCode()">
{{label.requestActivationCode}}
</button>
</form>
Maxlength、minlength、requiredが選択されています(条件が満たされない場合、ボタンは無効になります)。ここで、入力を数値に制限し、先頭に06(最小数のオランダ電話番号)を付けます。
ただし、検証ではパターンは選択されません。このようにすることはできますか、それともコードアプローチが必要ですか?
パターンを変数に追加する
var pattern=/06([0-9]{8})/;
属性をバインドします
<input type="text"
[(ngModel)]="msisdn"
ngControl="msisdnForm"
required
maxlength="10"
minlength="10"
[pattern]="pattern"
#msisdnForm="ngForm"
>
このPRのようです https://github.com/angular/angular/pull/6623/files 最初に着陸する必要があります。
未解決の問題がまだあります https://github.com/angular/angular/issues/7595 これにより、pattern
がバインドされなくなります。パターンを機能させるには、(バインディングなしで)DOMに静的に追加する必要があります。
詳細を入力します(Angular 2.0.8-2016年3月3日): https://github.com/angular/angular/commit/38cb526
リポジトリからの例:
<input [ngControl]="fullName" pattern="[a-zA-Z ]*">
私はそれをテストし、それは働いた:)-ここに私のコードがあります:
<form (ngSubmit)="onSubmit(room)" #roomForm='ngForm' >
...
<input
id='room-capacity'
type="text"
class="form-control"
[(ngModel)]='room.capacity'
ngControl="capacity"
required
pattern="[0-9]+"
#capacity='ngForm'>
2017年9月更新
私は現在、より多くの経験があるときに、通常、データ検証に以下の「安い」アプローチを使用すると言いたいだけです:
検証はサーバー側のみ(angularではない!)であり、何か問題がある場合、サーバー(Restful API)はエラーコードを返します HTTP 4 以降応答本体のjsonオブジェクト(angular私はerr
変数に入れます):
this.err = {
"capacity" : "too_small"
"filed_name" : "error_name",
"field2_name" : "other_error_name",
...
}
(サーバーが異なる形式で検証エラーを返す場合、通常は簡単に上記の構造にマッピングできます)
HTMLテンプレートでは、個別のタグ(div/span/smallなど)を使用します
<input [(ngModel)]='room.capacity' ...>
<small *ngIf="err.capacity" ...>{{ translate(err.capacity) }}</small>
ご覧のとおり、「容量」にエラーがある場合、エラー翻訳(ユーザー言語への)のタグが表示されます。このアプローチには次の利点があります。
<small>
鬼ごっこ)もちろん、これが必要な場合(サーバーに送信されないretypePasswordフィールドなど)時々、上記のアプローチの例外を作成し、angular(ただし、同様の "this.err
"エラーを表示するメカニズム(したがって、pattern
タグでinput
属性を直接使用せず、ユーザーが入力変更や保存などの適切なイベントを発生させた後、一部のコンポーネントメソッドで正規表現検証を行います) 。