Валидатор угловых пробелов работает неправильно - PullRequest
0 голосов
/ 09 мая 2019

Я не знаю, что я делаю не так.Мой валидатор пробелов работает неправильно.

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 }

  };
}

Я регистрируюсь вконсоль, и она реагировала только тогда, когда ничего не было вставлено или когда в начале были вставлены только пробелы.Это ничего не дает, потому что я хочу проверить, есть ли начальные или конечные пробелы, а затем показать сообщение об ошибке.

1 Ответ

1 голос
/ 09 мая 2019

Я думаю, вы хотите, чтобы это выглядело больше так

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

таким образом, вы проверяете, совпадает ли длина обрезки с длиной без обрезки, это будет указывать на наличие пробела до или после, так как функция обрезки возвращает строку с пробелом, обрезанным в начале и конец, поэтому, если длины не совпадают, пробел был обрезан.

...