私はAngular 2リアクティブフォームを使用しており、生年月日フィールドのバリデーターを作成しました。バリデーターは機能していますが、生年月日フィールドが 3 つの新しいフィールド (年、月、日) に分割されていることがわかりました。それらはすべて独自のバリデーターを持っています。私の質問は、元の生年月日バリデーターが 3 つのフィールドで機能するようにコードを変更するにはどうすればよいかということです。
1つのフィールドをチェックする私のオリジナルのバリデーター。入力(2000/12/12)が有効
export function dobValidator(control) {
const val = control.value;
const dobPattern = /^\d{4}\/\d{2}\/\d{2}$/ ;
const comp = val.split('/');
const y = parseInt(comp[0], 10);
const m = parseInt(comp[1], 10);
const d = parseInt(comp[2], 10);
const jsMonth = m - 1;
const date = new Date(y, jsMonth, d);
const isStringValid = dobPattern.test(control.value);
const isDateValid = (date.getFullYear() === y && date.getMonth() === jsMonth && date.getDate() === d);
return (isStringValid && isDateValid) ? null : { invalidDob: ('Date of birth not valid') };
};
new html with 3 fields year 年をチェックするバリデーターがあります day 入力が 1 から 31 の間であるかどうかをチェックするバリデーターを持っています month 入力が 1 から 12 の間であるかどうかをチェックするバリデーターを持っています。 3 つのフィールドを新しい文字列に変換し、元の生年月日バリデーターを使用します。
<label>Date of birth :</label>
<div>
<div class="col-xs-1">
<input required type="text" formControlName="day" class="form-control" placeholder="dd" id="day"/>
<p *ngIf="form.controls.day.dirty && form.controls.day.errors">{{ form.controls.day.errors.invalidDay }}</p>
</div>
<div class="col-xs-1">
<input required type="text" formControlName="month" class="form-control" placeholder="mm" id="month"/>
<p *ngIf="form.controls.month.dirty && form.controls.month.errors">{{ form.controls.month.errors.invalidMonth }}</p>
</div>
<div class="col-xs-2">
<input required type="text" formControlName="year" class="form-control" placeholder="yyyy" id="year"/>
<p *ngIf="form.controls.year.dirty && form.controls.year.errors">{{ form.controls.year.errors.invalidYear }}</p>
</div>
</div>
<div>
<button type="submit" [disabled]="form.invalid">Submit</button>
</di>