Angular перекрестная проверка и настраиваемая проверка вместе - PullRequest
0 голосов
/ 09 мая 2020

У меня 7 дней открытые, закрытые поля. Параметр open и close может иметь формат hh: mm или слово Closed. Таким образом, каждое поле open и close имеет проверки регулярного выражения на соответствие hh: mm или слову «Closed». Также я пытаюсь добавить дополнительную проверку перекрестных полей, чтобы одно из полей в день не было закрыто. если оба закрыты, все в порядке, но не один из них.

enter image description here

Код работает, если у меня есть одна из проверок, но если я есть они оба, это не работает. Я пытаюсь собрать пример кода в stackblitz.

https://stackblitz.com/angular/qvjapnglrrp

проверка регулярного выражения

validateInput(c: FormControl) {
    const hourMinpattern = /^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/;
    const closedPattern = /^Closed$/;
    return hourMinpattern.test(c.value) || closedPattern.test(c.value)
      ? null
      : {
          validateInput: {
            valid: false
          }
        };
  }

проверка перекрестных полей

mondayOpenCloseValidator(formGroup: FormGroup): ValidationErrors | null {
    const open = formGroup.get("mondayOpen");
    const close = formGroup.get("mondayClose");

    if (
      (open.value === "Closed" || close.value === "Closed") &&
      open.value !== close.value
    ) {
      close.setErrors({ badState: true });
      close.markAllAsTouched();
      return { badState: true };
    }

    close.setErrors(null);                
    return null;
  }

конструктор форм

this.editForm = this.formBuilder.group(
  {
    mondayOpen: new FormControl({ value: "", disabled: false }, [
      Validators.required,
      this.validateInput
    ]),
    mondayClose: new FormControl({ value: "", disabled: false }, [
      Validators.required,
      this.validateInput
    ]),
    tuesdayOpen: new FormControl({ value: "", disabled: false }, [
      Validators.required,
      this.validateInput
    ]),
    tuesdayClose: new FormControl({ value: "", disabled: false }, [
      Validators.required,
      this.validateInput
    ])
  },
  {
    validator: [
      this.mondayOpenCloseValidator,
      this.tuesdayOpenCloseValidator
    ]
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...