Дата подтверждения угловых реактивных форм год четыре цифры - PullRequest
2 голосов
/ 11 апреля 2019

Я использую Angular Reactive Forms и хочу подтвердить формат моей даты в приоритете (перед двумя существующими валидаторами).Мой действительный формат: дд / мм / гггг ( не дд / мм / гг).Я использую средство выбора даты bootstrap v4.

Моя форма:

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;
  };
}

Я пытаюсь добавить это Validators.pattern('(2|1)[0-9]{3}-[0-9]{2}-[2-9]{2}.*')

в режиме онлайн с регулярным выражением exec в порядке, но не в Angular (выведите эту ошибку):

{ "pattern": { "requiredPattern": "^(2|1)[0-9]{3}-[0-9]{2}-[2-9]{2}.*$", "actualValue": "2019-04-15T10:00:00.000Z" } }

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

проблема в загрузчике даты: «значение - это дата, а не строка».

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} };
  };
}
0 голосов
/ 11 апреля 2019

Передайте шаблон в виде регулярного выражения вместо строки, например: Validators.pattern (/ ^ (2 | 1) [0-9] {3} - [0-9] {2} - [2-9] {2}. * /) * +1001 *

...