Добавьте потребляющий .*
в конце, потому что регулярное выражение 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]).*"
См. принцип контрастности в подтверждении регулярного выражения пароля.