почему угловое регулярное выражение не работает в html, хорошо работают в typcrip - PullRequest
1 голос
/ 05 июня 2019

Привет, Кто-нибудь может объяснить мне, почему выражение регулярного выражения в свойстве шаблона не работает

  <input type="password" pattern="(?=.*[a-zA-Z])(?=.*[0-9])" minlength="6" [class.is-invalid]="passwordForm.errors && passwordForm.touched" #passwordForm="ngModel" name="password"  required class="form-control" [(ngModel)]="password">

 but i run in typescript it work well
 var mediumRegex = new RegExp("(?=.*[a-zA-Z])(?=.*[0-9])");
    console.log(
      mediumRegex.test("123asA")
  );

--->true
  console.log(
    mediumRegex.test("")
);
--->false
  console.log(
    mediumRegex.test("aaaa")
--->false

); console.log(
  mediumRegex.test("1z")
);
--->true

1 Ответ

1 голос
/ 05 июня 2019

Добавьте потребляющий .* в конце, потому что регулярное выражение HTML5 должно совпадать и потреблять всю входную строку (из-за того, что оно скрывается за ^(?: и )$ за кадром, когда компиляция объекта RegExp):

<input type="password" pattern="(?=.*[a-zA-Z])(?=.*[0-9]).*" minlength="6" [class.is-invalid]="passwordForm.errors && passwordForm.touched" #passwordForm="ngModel" name="password"  required class="form-control" [(ngModel)]="password">

Шаблон pattern="(?=.*[a-zA-Z])(?=.*[0-9]).*" может быть улучшен, если вы замените .* в запросах на обратные классы символов:

pattern="(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9]).*"

См. принцип контрастности в подтверждении регулярного выражения пароля.

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