【问题标题】:Angular Whitespace Validator working wrongAngular Whitespace Validator 工作错误
【发布时间】:2019-05-09 16:12:06
【问题描述】:

我不知道我做错了什么。我的空白符验证器工作错误。

TS:

this.personalForm = this.form.group({
      firstname: ['', [Validators.required, Validators.minLength(4), CustomValidators.validateCharacters]],
      lastname: ['', [Validators.required, NoWhitespaceValidator()]], //CustomValidators.validateCharacters,
      country: ['', [Validators.required]],
      dateOfBirth: ['', [Validators.required]],
      gender: ['', [Validators.required]],
})

HTML:

<mat-form-field class="field-sizing">
              <input matInput required placeholder="{{ 'REGISTRATION.LASTNAME' | translate }}" name="lastname"
                formControlName="lastname" type="name"
                [ngClass]="{ 'is-invalid': g.lastname.touched && g.lastname.errors }" />
                <mat-error class="invalid-feedback"
                *ngIf="g.lastname.touched && g.lastname.errors && g.lastname.errors.whitespace">
                {{ 'REGISTRATION.LASTNAME' | translate }} 
              </mat-error>
</mat-form-field>

验证器功能:

import { AbstractControl, ValidatorFn } from '@angular/forms';

export function NoWhitespaceValidator(): ValidatorFn {

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

     // messy but you get the idea
    let isWhitespace = (control.value || '').trim().length === 0;
    let isValid = !isWhitespace;
    return isValid ? null : { 'whitespace': true }

  };
}

我登录到控制台,它仅在没有插入任何内容或仅在开头插入空格时才做出反应。这并没有给我任何东西,因为我想检查是否有前导或结尾空格,然后显示错误消息。

【问题讨论】:

  • 只能使用正则表达式let isWhitespace = /^\s|\s$/.test(control.value);
  • 这很完美!谢谢你。我不擅长这个正则表达式的东西。 @penleychan

标签: angular validation angular-forms angular-validation


【解决方案1】:

我想你希望它看起来更像这样,

let isWhitespace = (control.value || '').trim().length !== (control.value || '').length;

通过这种方式,您正在检查修剪后的长度是否与未修剪的长度相同,这将指示有效之前或之后是否有空格,因为修剪函数返回的字符串从开头修剪了空格并且结束,所以如果长度不一样,空白已被修剪。

【讨论】:

  • 这不起作用。现在它甚至不能只识别空格。只识别空白字段。
  • 对不起,否定的逻辑让我困惑了一秒钟,这应该被编辑为正确的。如果它有前导或尾随空格,则返回 true,否则返回 false。这应该是你想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 2021-02-24
  • 2017-08-26
  • 2019-10-12
  • 1970-01-01
相关资源
最近更新 更多