【发布时间】:2022-01-28 02:29:09
【问题描述】:
早安,
我有一个要求,即只需要不允许只有 1 个特殊字符用于用户输入,即~。以下是我的代码:
<div class="form-input ">
<input class="pass" [type]="'password'" name="newPassword"
placeholder="New Password" required pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#&()-/$=<>?]).*$" #newPassword="ngModel"
[(ngModel)]="newPassword" (ngModelChange)="checkNewPassword()"
(click)="onInputFocus()" minlength={{changePasswordFormCriteria.minPwrdLength}}
maxlength=30 (blur)="checkNewOldPassVal()">
</div>
</div>
<div *ngIf="newPassword.errors?.pattern && loginPasswordForm.submitted" class="form-errors">
New Password must consist at least one uppercase, one lowercase letter, one number and one special characters within this range ! @ # & ( ) - ? / $ = < >
</div>
如您所见,我从pattern 中排除了~ 字符。如果我只键入 1 个特殊字符 ~,例如“password~abc”,这将有效,这将在 newPassword.errors?.pattern 中提示错误消息。这是正确的,符合要求。
但是,如果我包含其他特殊字符,例如我输入“password@~abc”,这不会提示错误信息,它会允许通过。我想知道我没有在模式中包含~,但不确定为什么它仍然可以通过。
我可以知道我犯了什么错误吗?
【问题讨论】:
-
您过于关注 tilda 角色 (
'~')。我怀疑您是否想要'μ'或'ع'。代替最后的.*$,您需要一个包含所有有效字符的字符类,该字符被执行一次或多次,后跟一个字符串结尾锚:[<all valid characters go here>]+$(或[...]*$或[...]{4,}$,如所有有效字符串必须至少包含四个字符)。
标签: angular regex special-characters