首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据Angular中的验证模式的错误消息

根据Angular中的验证模式的错误消息
EN

Stack Overflow用户
提问于 2018-02-15 16:14:40
回答 3查看 11K关注 0票数 5

我想根据验证模式来划分错误消息,例如,在下面,有两种模式

Validators.pattern(/[^ +]/), Validators.pattern(/^[ +|a-zA-Z0-9]+$/),

但只能设置一条消息。

<md-error *ngIf="locaCd.errors?.pattern"> onny blank is unacceptable AND must be filled by a~z,A~Z or number. </md-error>

有没有办法在不制作CustomValidation的情况下划分成每一个??

EN

回答 3

Stack Overflow用户

发布于 2018-02-15 17:02:48

默认情况下,Validators.pattern()接受pattern: string | RegExp形式的参数,因此我最好建议您创建自定义验证,它可以处理单个方法,可以为您动态处理。

例如demo.component.ts

代码语言:javascript
复制
import { FormGroup, FormControl, Validators, ValidatorFn } from '@angular/forms';

this.form = new FormGroup({
   email: new FormControl('', [
    this.customPatternValid({ pattern: /[A-Z]/, msg: 'Small characters not allowed' }),
    this.customPatternValid({ pattern: /^([^0-9]*)$/, msg: 'Numbers is not allowed' })
   ]),
   password: new FormControl('', [
    Validators.required
   ])
});

// Create our customPatternValid function 

public customPatternValid(config: any): ValidatorFn {
    return (control: FormControl) => {
      let urlRegEx: RegExp = config.pattern;
      if (control.value && !control.value.match(urlRegEx)) {
        return {
          invalidMsg: config.msg
        };
      } else {
        return null;
      }
    };
}

例如demo.component.html

代码语言:javascript
复制
<form [formGroup]="form">
  <input type="email" placeholder="Email" formControlName="email"/>

  <div *ngIf="!form.controls.email.valid && (form.controls.email.dirty ||form.controls.email.touched)" class="error">
    <div *ngIf="form.controls.email.errors.invalidMsg">
      {{form.controls.email.errors.invalidMsg}}
    </div>
  </div>
</form>
票数 7
EN

Stack Overflow用户

发布于 2018-02-15 16:32:48

您可以在md-error中使用相同的模式表达式,并将它们分离到两个不同的div-elements中,使一个匹配另一个

编辑在测试了myselv之后,我发现你需要使用typescript中的regepx来执行匹配(至少我是这样做的)

在组件中,定义yout regexp

代码语言:javascript
复制
emptyRegExp = new RegExp(/[^ +]/);
letterNumberRegExp = new RegExp(/^[ +|a-zA-Z0-9]+$/);

然后在html中使用这些表达式来显示所需的错误消息。

代码语言:javascript
复制
<md-error *ngIf="locaCd.errors?.pattern">
   <div *ngIf="emptyRegExp.exec(locaCd?.value)"> Blank is unacceptable.</div>
   <div *ngIf="letterNumberRegExp.exec(locaCd?.value))">Must be filled by a~z,A~Z or number.</div>
</md-error>
票数 0
EN

Stack Overflow用户

发布于 2021-12-09 03:40:18

下面是ValidatorFn,它将验证委托给Validators.pattern,但在验证错误时返回一个带有message键的对象。

代码语言:javascript
复制
const patternWithMessage = (pattern: string | RegExp, message: string): ValidatorFn => {
    const delegateFn = Validators.pattern(pattern)
    return control => delegateFn(control) === null ? null : { message }
}

这样,模板就可以在验证错误时显示message的值。

例如patternWithMessage(/^[a-zA-Z_][a-zA-Z_0-9]*$/, 'Invalid value for key')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48802630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档