Este es un aspecto muy importante al implementar un formulario, ya que nos permite definir que la información ingresada por los usuarios cumpla con las características y necesidades de nuestra página. En otras palabras, podemos definir no solo el tipo de dato que deseamos recibir, sino también el dónde hacerlo y las características obligatorias de esta información.
Las validaciones se pueden aplicar tanto en el lado del navegador (frontend) como en el lado del servidor (backend). En el caso de HTML, únicamente se interactúa con las validaciones del lado del navegador; estas actúan como un primer filtro para la información ingresada en la página, lo cual las convierte en un recurso muy útil para conseguir un mejor funcionamiento.
Por lo tanto, las validaciones en el navegador nos ayudan a:
Nota: Cabe resaltar que si bien estas validaciones son una muy buena implementación, no deben ser la única medida de seguridad de la página, ya que por muy bien estructuradas y verificadas que estén, un usuario malicioso aún puede alterar e inyectar datos en el envío de estos hacia el servidor.
Una de las características más resaltantes de los elementos de formulario modernos es su capacidad para validar la mayoría de los datos sin recurrir a JavaScript, esto a través del uso de funciones las cuales están disponibles de forma inherente a la mayoría de los elementos.
Si los datos ingresados en el elemento cumplen con todas las pautas definidas para este, se considera válido. En aquellos elementos definidos como válidos:
:valid, la cual permite aplicar estilos específicamente a todos aquellos elementos válidos.Cuando un elemento no es válido:
:invalid, la cual le permite aplicar estilos CSS a todos aquellos elementos que no sean válidos.Nota: A continuación se nombran los términos utilizados para los casos de error que pudiesen cometer los usuarios, resultando en elementos interpretados como inválidos:
Este código retorna un cuadro de texto al que se le asignan estilos en base a su estatus; es decir, al usar el atributo "required", la entrada será compatible con las pseudoclases ":required", ":invalid" y ":valid". Por otro lado, el elemento será considerado inválido en aquellos casos en los que se intente enviar el campo vacío.
Nota: Indicar cuándo un campo de un formulario es obligatorio no solo es una buena práctica, sino que es un requisito de las normas de accesibilidad de la WCAG.
Nota: También es una buena práctica preguntar solo lo necesario; los formularios excesivamente largos o con información irrelevante pueden ser contraproducentes.
Minlength y Maxlength: Definen la longitud máxima y mínima de los datos textuales. El elemento será inválido si el texto es inferior al mínimo o superior al máximo definido.
Nota: Los navegadores normalmente no permiten escribir un valor más largo de lo esperado.
Nota: Una buena herramienta para la experiencia del usuario es utilizar "maxlength" junto con JavaScript para mostrar un contador de caracteres.
Min y Max: Especifican los valores mínimo y máximo de los elementos de entrada numéricos. Definen el rango aceptado; si el número está fuera de este, se considerará inválido.
Este código define la cantidad de caracteres y el rango numérico aceptado. Si no se cumple con el rango de caracteres o el número no está entre 1 y 10, el elemento es tratado como inválido. A continuación el resultado funcional:
Nota: Elementos tipo "number", "range" y "date" también pueden adoptar el atributo "step", el cual define la cantidad de incremento o reducción del valor.
Pattern: Este atributo define una expresión regular. Permite definir que únicamente sean aceptadas ciertas cadenas de caracteres definidas con anterioridad.
Ejemplo funcional:
El resultado es el siguiente:
Las expresiones regulares diferencian entre mayúsculas y minúsculas. En este ejemplo, el input acepta: Banana, banana, Cherry y cherry. Si el usuario ingresa algo diferente, será reconocido como inválido.
Se trata de cualquier framework o código propio utilizado para validar un formulario. Tiene la ventaja de ser completamente personalizable, cubriendo cualquier necesidad de información y brindando mayor seguridad si está bien estructurado.
Sin embargo, su implementación es más compleja que las validaciones integradas de HTML, ya que requiere formular código propio o incluir bibliotecas.
Debido a que involucra un lenguaje externo, es necesario tener presentes cualidades como el DOM y las APIs, que tienen la capacidad de repercutir en los elementos HTML.
Consta de un conjunto de métodos y propiedades disponibles en las interfaces DOM de los elementos de formularios:
HTMLButtonElementHTMLFieldSetElementHTMLInputElementHTMLOutputElementHTMLSelectElementHTMLTextAreaElementPropiedades disponibles:
ValidationMessage: Devuelve un mensaje de error descriptivo. Puede retornar un mensaje personalizado, "false" si no es candidato para validación, o una cadena vacía si es válido.
Validity: Retorna un objeto ValidityState con propiedades como patternMismatch, tooLong, tooShort, rangeOverflow, typeMismatch, valid y valueMissing.
Métodos disponibles:
preventDefault() en onSubmit.Es posible usar JavaScript para configurar mensajes que se mostrarán al incumplir las pautas. No obstante, tiene desventajas: no es fácil modificar su aspecto con CSS y depende de la configuración regional del navegador.
HTML:
JavaScript:
Aquí verificamos la propiedad validity.typeMismatch. Si el correo no tiene el formato correcto, llamamos a setCustomValidity() con nuestro mensaje. Si es correcto, pasamos una cadena vacía para validar la entrada.
El atributo "novalidate" indica al navegador que no realice la validación por defecto, permitiéndonos mostrar nuestros mensajes personalizados sin interferencias.
Para estructurar validaciones de esta forma hay que tener en cuenta:
:invalid debe definirse como una clase manual.Como se aprecia, realizar una validación propia no es difícil si el código está bien planteado. Además, es una buena práctica procurar que el código sea reutilizable para agilizar futuros desarrollos.