Pesquisa de site

validação - Como validar espaços em branco/espaços vazios? [Angular 2]


Eu gostaria de evitar espaços em branco/espaços vazios no meu formulário Angular 2. Isso é possível? Como isso pode ser feito?

Resposta #1

Você pode criar um validador personalizado para lidar com isso.

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

Adicione o método noWhitespaceValidator ao seu componente

public noWhitespaceValidator(control: FormControl) {
    return (control.value || '').trim().length? null : { 'whitespace': true };       
}

e no HTML

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

Resposta #2

Eu acho que uma solução simples e limpa é usar a validação de padrão.

O seguinte padrão permitirá uma string que começa com espaços em branco e não permitirá uma string contendo apenas espaços em branco:

/^(\s+\S+\s*)*(?!\s).*$/

Isso pode ser definido ao adicionar os validadores para o controle correspondente do grupo de formulários:

const form = this.formBuilder.group({
            name: ['', [
                Validators.required,
                Validators.pattern(/^(\s+\S+\s*)*(?!\s).*$/)
            ]]
        });

Resposta #3

Talvez este artigo possa ajudá-lo http://blog.angular-university.io/introduction-to-angular-2-forms-template-driven-vs-model-driven/

Nesta abordagem, você precisa usar FormControl, depois observar as mudanças de valor e então aplicar sua máscara ao valor. Um exemplo seria:

...
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));
            });

}

Resposta #4

Impedir o usuário de digitar espaço em uma caixa de texto no Angular 6

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

Resposta #5

    export function noWhitespaceValidator(control: FormControl) {
       const isSpace = (control.value || '').match(/\s/g);
       return isSpace ? {'whitespace': true} : null;
}

usar

 password: ['', [Validators.required, noWhitespaceValidator]]

Em template/html

<span *ngIf="newWpForm.get('password').hasError('whitespace')">
    password cannot contain whitespace
</span>

Resposta #6

Se você está usando Formulários Reativos do Angular, você pode criar um arquivo com uma função - um validador. Isso não permitirá que apenas espaços sejam inseridos.

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

e então, no arquivo TypeScript do seu componente, use o validador assim, por exemplo.

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

Resposta #7

Uma alternativa seria usar o validador de padrão do Angular e corresponder a qualquer caractere que não seja espaço em branco.

const nonWhitespaceRegExp: RegExp = new RegExp("\\S");

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

Artigos relacionados