У меня 7 дней открытые, закрытые поля. Параметр open и close может иметь формат hh: mm или слово Closed. Таким образом, каждое поле open и close имеет проверки регулярного выражения на соответствие hh: mm или слову «Closed». Также я пытаюсь добавить дополнительную проверку перекрестных полей, чтобы одно из полей в день не было закрыто. если оба закрыты, все в порядке, но не один из них.
![enter image description here](https://i.stack.imgur.com/56oum.png)
Код работает, если у меня есть одна из проверок, но если я есть они оба, это не работает. Я пытаюсь собрать пример кода в 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
]
}
);