You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 11 Material表单字段单行展示正则校验错误及报错不显示问题

正则校验错误不显示问题修复

你当前的错误提示判断逻辑仅覆盖了required必填校验场景,未匹配pattern正则校验失败的场景,因此正则校验不通过时不会渲染错误提示。调整*ngIf判断逻辑,同时支持两种错误场景的提示即可解决。

错误提示单行展示实现

给错误提示标签添加强制不换行的CSS样式即可实现单行展示效果,多余内容可按需配置省略号显示。


修正后模板代码

<mat-form-field class="form-element">
  <input matInput id="password1" placeholder="New password" formControlName="password1">            
  <label 
    class="error-tip"
    *ngIf="resetPasswordForm.get('password1').errors && (resetPasswordForm.get('password1').dirty || resetPasswordForm.get('password1').touched)"
  >
    <ng-container *ngIf="resetPasswordForm.get('password1').hasError('required')">请输入密码</ng-container>
    <ng-container *ngIf="resetPasswordForm.get('password1').hasError('pattern')">密码需包含至少1个数字、大小写字母及特殊字符,长度为8-16位</ng-container>
  </label>
</mat-form-field>

优化后表单校验代码

正则去除了重复声明的特殊字符,规则保持和原有需求一致:

resetPasswordForm = this.formBuilder.group({
  password1: ['',[ 
    Validators.required, 
    Validators.pattern(/^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[$@!%*?&()]).{8,16}$/) 
  ]],
  password2: ['',[ 
    Validators.required, 
    Validators.pattern(/^(?=\D*\d)(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=.*[$@!%*?&()]).{8,16}$/) 
  ]],
})

新增CSS样式

.error-tip {
  display: block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: #f44336;
  font-size: 12px;
  margin-top: 4px;
}

如果使用Angular Material自带的<mat-error>组件替代自定义label,可自动适配Material设计规范的单行错误样式,无需额外写强制换行的CSS。

内容的提问来源于stack exchange,提问作者Peter Marynowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 06:24:04