Как проверить пробелы/пустое пространство? [Угловая 2]

Я хотел бы избежать пробелов/пустых пространств в моей угловой форме? Является ли это возможным? Как это может быть сделано?

Ответы

Ответ 1

Возможно, эта статья поможет вам http://blog.angular-university.io/introduction-to-angular-2-forms-template-driven-vs-model-driven/

В этом подходе вы должны использовать FormControl, а затем следить за изменениями значений, а затем применять маску к значению. Примером может служить:

...
form: FormGroup;
...


ngOnInit(){
    this.form.valueChanges
            .map((value) => {
                // Here you can manipulate your value
                value.firstName = value.firstName.trim();
                return value;
            })
            .filter((value) => this.form.valid)
            .subscribe((value) => {
               console.log("Model Driven Form valid value: vm = ",JSON.stringify(value));
            });

}

Ответ 2

Вы можете создать собственный валидатор, чтобы справиться с этим.

new FormControl(field.fieldValue || '', [Validators.required, this.noWhitespaceValidator])

Добавьте метод noWhitespaceValidator в ваш компонент

public noWhitespaceValidator(control: FormControl) {
    const isWhitespace = (control.value || '').trim().length === 0;
    const isValid = !isWhitespace;
    return isValid ? null : { 'whitespace': true };
}

и в HTML

<div *ngIf="yourForm.hasError('whitespace')">Please enter valid data</div>

Ответ 3

Я создал валидатор, который сделал то же самое, что и angular для minLength, за исключением того, что я добавил trim()

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


@Injectable()
export class ValidatorHelper {
    ///This is the guts of Angulars minLength, added a trim for the validation
    static minLength(minLength: number): ValidatorFn {
        return (control: AbstractControl): { [key: string]: any } => {
            if (ValidatorHelper.isPresent(Validators.required(control))) {
                return null;
            }
             const v: string = control.value ? control.value : '';
            return v.trim().length < minLength ?
                { 'minlength': { 'requiredLength': minLength, 'actualLength': v.trim().length } } :
                null;
        };
    }

    static isPresent(obj: any): boolean {
        return obj !== undefined && obj !== null;
    }
}

Затем я в своем app.component.ts переопределил функцию minLength, предоставляемую angular.

import { Component, OnInit } from '@angular/core';    
import { ValidatorHelper } from 'app/common/components/validators/validator-helper';
import { Validators } from '@angular/forms';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {  
  constructor() { }

  ngOnInit(): void {       
    Validators.minLength = ValidatorHelper.minLength;
  }
}

Теперь везде, где используется встроенный валидатор angular minLength, он будет использовать minLength, который вы создали в помощнике.

Validators.compose([
      Validators.minLength(2)         
    ]);

Ответ 4

Запретить пользователю вводить пробел в текстовом поле в Angular 6

<input type="text" (keydown.space)="$event.preventDefault();" required />

Ответ 5

Чтобы избежать представления формы, просто используйте required attr в полях ввода.

<input type="text" required>

Или, после отправки

Когда форма отправлена, вы можете использовать str.trim(), чтобы удалить пустые пробелы в начало и конец строки. Я сделал функцию отправки, чтобы показать вам:

submitFunction(formData){

    if(!formData.foo){
        // launch an alert to say the user the field cannot be empty
        return false;
    }
    else
    {
        formData.foo = formData.foo.trim(); // removes white 
        // do your logic here
        return true;
    }

}

Ответ 6

Если вы используете Angular Reactive Forms, вы можете создать файл с функцией - валидатором. Это не позволит вводить только пробелы.

import { AbstractControl } from '@angular/forms';
export function removeSpaces(control: AbstractControl) {
  if (control && control.value && !control.value.replace(/\s/g, '').length) {
    control.setValue('');
  }
  return null;
}

а затем в вашем файле машинописи компонентов используйте валидатор, например, такой.

this.formGroup = this.fb.group({
  name: [null, [Validators.required, removeSpaces]]
});

Ответ 7

Это немного другой ответ на следующий, который работал для меня:

public static validate(control: FormControl): { whitespace: boolean } {
    const valueNoWhiteSpace = control.value.trim();
    const isValid = valueNoWhiteSpace === control.value;
    return isValid ? null : { whitespace: true };
}

Ответ 8

Чтобы автоматически удалить все пробелы из поля ввода, вам нужно создать собственный валидатор.

removeSpaces(c: FormControl) {
  if (c && c.value) {
    let removedSpaces = c.value.split(' ').join('');
    c.value !== removedSpaces && c.setValue(removedSpaces);
  }
  return null;
}

Работает с введенным и вставленным текстом.

Ответ 9

После долгих испытаний я нашел [a-zA-Z\\s]* для буквенно-цифровых символов с пробелами

Пример:

Нью-Йорк

Нью-Дели

Ответ 10

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

Как здесь: -

this.anyForm.valueChanges.subscribe(data => {
   for (var key in data) {
        if (data[key].trim() == "") {
          this.f[key].setValue("", { emitEvent: false });
        }
      }
    }

Edited --

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

this.anyForm.valueChanges.subscribe(data => {
  for (var key in data) {
        if (data[key] && data[key].toString().trim() == "") {
          this.f[key].setValue("", { emitEvent: false });
        }
      }  
  }