Tabla de Contenidos

8.2 Validaciones

Acabamos de ver cómo saber si un campo o formulario es o no válido. En este tema vamos a ver las validaciones estándar que tiene angular dejando para la unidad 00_start la creación de nuevas validaciones.

Tipos de Validaciones

AngularJs dispone de 9 tipos de validaciones distintas:

Para que todas estas validaciones funcionen es necesario que tanto el <form>como el <input>, <select> , etc. tengan la propiedad name.

<form name="nombre">
</form>

<input name="nombre">

<select name="nombre">

Pasemos ahora a ver cómo se aplican cada una de ellas.

email

Deberemos indicar en el <input> que type=“email”.

<input type="email" ng-model="model.correo" name="correo" >

max

Sólo se aplica a <input> cuyo type=“number”. Deberemos indicar la directiva max=“valor”, siendo valor el valor máximo que puede tener.

<input type="number" ng-model="model.edad" name="edad" max="99" >

maxlength

Sólo se aplica a <input> cuyo type=“number” o type=“text” o <textarea>. Deberemos indicar la directiva ng-maxlength=“valor”, siendo valor el tamaño máximo que puede tener en caracteres.

<input type="text" ng-model="model.nombre" name="nombre" ng-maxlength="50" >

min

Sólo se aplica a <input> cuyo type=“number”.

Deberemos indicar la directiva min=“valor”, siendo valor el valor mínimo que puede tener.

<input type="number" ng-model="model.edad" name="edad" min="18" >

minlength

Sólo se aplica a <input> cuyo type=“number” o type=“text” o <textarea>. Deberemos indicar la directiva ng-minlength=“valor”, siendo valor el tamaño mínimo que puede tener en caracteres.

<input type="text" ng-model="model.nombre" name="nombre" ng-minlength="3" >

number

Deberemos indicar en el <input> que type=“number”.

<input type="number" ng-model="model.edad" name="edad"  >

pattern

Sólo se aplica a <input> cuyo type=“number” , type=“text” o type=“email” o <textarea>. Deberemos indicar la directiva ng-pattern=“valor”, siendo valor la expresión regular que tiene que cumplir el valor.

<input type="text" ng-model="model.nombre" name="nombre" ng-pattern="/^[a-zA-Z]*$/" >

Recuerda que:

  • Hay que poner las barras al principio y al final
  • Si quieres que la expresión se aplique a todo el valor pon “^” al principio y “$” al final

Esta directiva permite que la expresión regular esté en una propiedad del $scope. En ese caso se debe poner así:

<input type="text" ng-model="model.nombre" name="nombre" ng-pattern="patternNombre" >

Y en $scope indicar lo siguiente:

$scope.patternNombre=/^[a-zA-Z]*$/;

required

Se aplica a cualquier <input> , <select> o <textarea>.

Se debe poner la directiva required o ng-required.

La diferencia entre ellos es que al poner required el valor es requerido pero al poner ng-required se le podría poner un valor al atributo ng-required que fuera true o false pero que dicho valor venga del $scope.

<input type="text" ng-model="model.nombre" name="nombre" required >

<input type="text" ng-model="model.nombre" name="nombre" ng-required="requeridoNombre" >

En este segundo ejemplo para que fuera requerido model.nombre, deberíamos tener en el $scope :

$scope.requeridoNombre=true

y para que no fuera requerido model.nombre, deberíamos tener en el $scope :

$scope.requeridoNombre=false

url

Deberemos indicar en el <input> que type=“url”.

<input type="url" ng-model="model.sitioweb" name="sitioweb"  >

Comprobando las validaciones

Ahora que ya sabemos cómo poner las validaciones falta saber si una validación ha fallado. Hay dos formas de saberlo:

Sobre un campo

Si sabemos un campo, podemos averiguar las validaciones que ha fallado. Para explicarlo vamos a hacerlo con unos ejemplos:

Ejemplo 1

Si queremos saber si ha fallado la validación required en el campo nombre del formulario miFormulario deberemos ver el valor de la siguiente expresión:

$scope.miFormulario.nombre.$error.required

Ejemplo 2

Si queremos saber si ha fallado la validación email en el campo correo del formulario miFormulario deberemos ver el valor de la siguiente expresión:

$scope.miFormulario.correo.$error.email

Lo que nos retorna la expresión $scope.miFormulario.nombre o $scope.miFormulario.correo son objetos de tipo NgModelController sobre los que podremos acceder a todas sus propiedades.

Gracias a que JavaScript permite saber qué propiedades hay en un objeto, podríamos recorrer todas las propiedades para tener una lista de todo lo que está fallando.

Sobre un tipo de validación

Dado un tipo de validación podemos saber cuántos campos no cumplen esa validación.Para explicarlo vamos a hacerlo con unos ejemplos:

Ejemplo 1

Si queremos saber cuántos campos han fallado la validación de required del formulario miFormulario deberemos ver el valor de la siguiente expresión:

$scope.miFormulario.$error.required
El resultado es esta expresión

Ejemplo 2

Si queremos saber cuántos campos han fallado la validación de email del formulario miFormulario deberemos ver el valor de la siguiente expresión:

$scope.miFormulario.$error.email
El resultado es esta expresión

Gracias a que JavaScript permite saber qué propiedades hay en un objeto, podríamos recorrer todas las propiedades para tener una lista de todo lo que está fallando.

novalidate

Lo último que nos queda por contar es el atributo novalidate que debemos poner en el tag <form>.

Este atributo se pone para evitar que el propio navegador se ponga a hacer sus propias validaciones con sus propios mensajes o estilos CSS y que choquen con las que está haciendo AngularJS.

<form name="miFormulario" novalidate >
</form>

Recuerda poner el atributo novalidate en el tag <form>.

Ejemplo

Referencias