Angular Reactive Forms验证日期年份四位数

时间:2019-04-11 08:11:46

标签: regex angular date angular-reactive-forms

我使用Angular Reactive Forms,并且希望优先使用日期格式(在两个现有的验证器之前)。我的有效格式为dd / MM / YYYY(不是 dd / MM / YY)。我使用bootstrap v4日期选择器。

我的表单:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="fileItem" type="file" multiple>

我的验证人:

this.myForm = this.fb.group({
  'day': ['', [Validators.required, minDateValidator(this.todayMoment.toDate()), businessDayValidator()]]
});

我尝试添加此export function minDateValidator(minDate: Date): ValidatorFn { return (control: AbstractControl): {[key: string]: any} | null => { const invalid = control.value < minDate.setHours(0, 0, 0); return invalid ? {'minDate': {value: control.value}} : null; }; } export function businessDayValidator(): ValidatorFn { return (control: AbstractControl): {[key: string]: any} | null => { const invalid = !DateUtilsService.isBusinessDay(moment(control.value)); return invalid ? {'businessDay': {value: control.value}} : null; }; }

online regex exec可以,但不能在Angular中使用(打印此错误):

Validators.pattern('(2|1)[0-9]{3}-[0-9]{2}-[2-9]{2}.*')

2 个答案:

答案 0 :(得分:0)

通过模式作为正则表达式而不是字符串,如下所示:Validators.pattern(/ ^(2 | 1)[0-9] {3}-[0-9] {2}-[2-9] { 2}。* /)

答案 1 :(得分:0)

引导日期选择器中的问题是“值是日期而不是字符串”。

this.myForm = this.fb.group({
  'day': ['', [Validators.required, formatValidator(), minDateValidator(this.todayMoment.toDate()), businessDayValidator()]]
});

export function formatValidator(): ValidatorFn {
  return (control: AbstractControl): {[key: string]: any} | null => {
    const dateRegEx = new RegExp('^(2|1){1}[0-9]{3}.[0-9]{2}.[0-9]{2}.*$');
    const dateInput = control.value as Date;
    const match = dateInput.toISOString && dateRegEx.test(dateInput.toISOString());
    return  match ? null : {'formatValidator': {value: control.value} };
  };
}