Angular 7:Formvalidation,Validators.pattern 不起作用

Max*_*Max 5 typescript angular angular-reactive-forms angular7

我只需要一个来自匹配整数的验证。因此我使用pattern带有正则表达式的验证器(见下文)。此外,该字段不应为空,因此我添加了required验证器。

pattern错误永远不会被触发。我阅读了 angular 文档并查看了 的源代码,pattern但对我来说仍然没有意义。此外,我已经阅读了几乎所有与此主题相关的关于 stackoverflow 的问题。但我仍然无法弄清楚为什么该模式不起作用。

或许有大佬可以帮帮我,谢谢!

这是我的代码 component.ts:

// definition of the formcontrol
hours = new FormControl('', [
  Validators.required,
  Validators.pattern('^[0-9]*$'),
])

// for debugging
log() {
  console.log('required: ', this.hours.hasError('required'));
  console.log('pattern: ', this.hours.hasError('pattern'));
  console.log('Erros: ', this.hours.errors);
}
Run Code Online (Sandbox Code Playgroud)

模板:

<mat-form-field>
  <input matInput [formControl]="hours" (input)="log()"
    placeholder="Anzahl der ausbezahlten Überstunden" type="number">
  <mat-error *ngIf="hours.hasError('required') && !hours.hasError('pattern')">
    Anzahl der Überstunden fehlt!
  </mat-error>
  <mat-error *ngIf="!hours.hasError('required') && hours.hasError('pattern')">
    Anzahl muss eine Ganzzahl sein!
  </mat-error>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

例子inputValue=""

required: true
pattern: false
Error: Object { required: true }
Run Code Online (Sandbox Code Playgroud)

inputValue="1"

required:  false
pattern:  false
Error:  null
Run Code Online (Sandbox Code Playgroud)

inputValue="a"

required:  true
pattern:  false
Error: Object { required: true }
Run Code Online (Sandbox Code Playgroud)

oni*_*nik 5

它不适用于 type="number",如果您将其更改为 type="text" 它将起作用

  • 是的,我只是在写答案。 (2认同)