Валидатор работает как атрибут на входе, но не на контроле формы - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь выполнить проверку через контроль формы, но когда я использую регулярное выражение через контроль формы, кажется, что проверка не выполняется правильно. Когда я добавляю шаблон в поле ввода в HTML, он отлично работает. Я пытаюсь подтвердить доменное имя.

let regexPattern = "^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$";
this.domainName.setValidators(regexPattern)

этот метод не работает, я могу ввести слова, такие как ".com", и статус действителен, когда я помещаю на вход одно и то же регулярное выражение, это работает

<input matInput formControlName="domainName" pattern="^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$" placeholder="Domain Name">

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2020

Если вы выполняете проверку с использованием setValidators, тогда вы должны вернуть свое пользовательское значение проверки логического типа. Здесь вы не возвращаете никаких данных. Код должен быть похож на

 this.formGroup.controls["firstName"].setValidators([Validators.required, this.checkDomain]);

  checkDomain(control) {
  console.log("string == ");
  console.log(control.value);
  let test = control.value;
  var pattern = new RegExp(/^(?!.* .*)(?:[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/)
  if(test.match(pattern)){
    return true;
  }
  else{
    return false;
  }
}

и ваш атрибут шаблона в html это wokrs. Вы можете изучить ниже ссылку.

Примеры проверки

Мой английский sh не так хорош. Поэтому избегайте любых недоразумений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...