【问题标题】:validate multiple strings in Angular在 Angular 中验证多个字符串
【发布时间】:2022-01-17 08:34:20
【问题描述】:

我想验证输入类型文本中的一些字符串,如果字符串是蓝色、红色或绿色,则验证正确,否则不正确。我该如何验证?我试过了,但只适用于第一种颜色。

colorValidator():ValidatorFn {

    return (control: AbstractControl): { [key: string]: any } | null =>

        control.value === ( 'blue' || 'red' || 'green') ? null : {correctColor: control.value};

  }

我看到代码可以用来测试一个字符串,我认为它可以用来验证几个,但是它不起作用,我不知道该怎么做。

这是html表单:

<div class="form-group">
  <h4 class="error">{{message}}</h4>
   <form (ngSubmit)="createWine()" [formGroup]="wineForm">
    <div>
      <div>
       <input type="text" name="name" placeholder="Wine Name" formControlName="name">
      </div>
      <div class="error" *ngIf="(name.dirty || message) && name.invalid">
        <div *ngIf="name.errors['required']"> Insert color </div>
        <div *ngIf="name.errors['correctColor']">The color isn't valid
      </div>
    </div>

谢谢

【问题讨论】:

    标签: angular validation


    【解决方案1】:

    您可以用这些颜色制作一个正则表达式并使用Validators.pattern(/blue|red|green/)

    color: new FormControl('', {
      validators: [Validators.required, Validators.pattern(/\b(blue|red|green)\b(?!\s)/),
    }),
    

    像这个例子: https://stackblitz.com/edit/angular-ivy-zs3oxj?file=src/app/app.component.ts

    或者如果你想要完全匹配: 使用 \b 作为单词边界: Validators.pattern(/\b(blue|red|green)\b/)


    自定义验证函数,而不是 Regex 模式:

    const colorValidator: ValidatorFn = (control: AbstractControl) => {
      const color = control.value;
      const validColors = ['blue', 'red', 'green'];
      if (validColors.some((validColor) => validColor === color)) return null;
    
      return {
        correctColor: 'Enter valid color',
      };
    };
    

    https://stackblitz.com/edit/angular-ivy-cqnjsu?file=src/app/app.component.ts

    【讨论】:

    • 看起来不错但不起作用,我可以插入另一个字符串并且不会提醒我,如果有人写了一个不同于蓝色、红色或绿色的单词,它必须得到消息“颜色无效”。这个想法是创建一个自定义函数来验证。不过谢谢。
    • 在这种情况下,您需要一个单词边界并确保它后面没有空格。这是正则表达式验证器:Validators.pattern(/\b(blue|red|green)\b(?!\s)/) 工作示例:stackblitz.com/edit/angular-ivy-e3j3sc?file=src/app/…
    • 好的,这个适用于正则表达式。有没有办法创建一个函数并在 Validators.required 之后调用它?示例:[Validators.required, nameFunction()]。我已经尝试过自定义验证函数,但 Visual Studio 说我在调用该函数时需要一个参数。
    • 是的,这是我回答的第二部分。我还提供了一个 stackblitz 链接到那个
    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2016-03-19
    • 2018-06-05
    • 2011-02-21
    相关资源
    最近更新 更多