El bajo uso de la validación de formularios HTML
- Los formularios HTML tienen un mecanismo de validación potente, pero no se usa mucho. Mucha gente no lo conoce bien. Esto podría deberse a defectos de diseño.
Atributos, métodos y propiedades
- Se puede agregar el atributo
required para evitar entradas vacías.
- Hay tres formas de agregar restricciones a una entrada:
- usar valores específicos del atributo
type: "email", "number", "url"
- usar otros atributos de entrada como
"pattern" o "maxlength"
- usar el método DOM
setCustomValidity: la forma más potente, capaz de crear lógica de validación arbitraria y manejar casos complejos.
Las sutilezas de la API imperativa
- La API
setCustomValidity solo se ofrece como método, lo que la hace incómoda de usar.
- Por ejemplo, puede implementarse una funcionalidad equivalente al atributo
required para bloquear el envío del formulario cuando la entrada está vacía.
- En el renderizado inicial, debe configurarse como no válida si la entrada está vacía.
El problema del boilerplate
- La forma de validar valores iniciales es engorrosa.
- La lógica de validación se duplica entre el manejador
onChange y la etapa de renderizado inicial.
- La combinación de
useRef + useLayoutEffect + onChange es compleja.
Lo que falta
- Hace falta un atributo
custom-validity.
- En los frameworks declarativos, permitiría definir la validación de entradas de forma potente.
El poder de la validación asíncrona
- Puede manejar casos donde un nombre de usuario solo debe ser válido si no está en uso.
- Requiere una llamada asíncrona al servidor y un estado intermedio.
Implementación
- Se usa la función
verifyUsername para comprobar la unicidad del nombre de usuario.
- Se usa
useQuery para gestionar el estado de la solicitud al servidor.
- Se usa la propiedad
customValidity para describir el flujo de validación asíncrona.
Formulario de confirmación de contraseña
- Se implementa un formulario donde la contraseña ingresada debe repetirse.
- La validación verifica que los dos campos coincidan.
Conclusión
setCustomValidity puede cubrir diversas necesidades de validación.
- Una API potente es lo que aporta el verdadero poder.
- Se espera que esta funcionalidad se agregue a la especificación de HTML.
Resumen de GN⁺
- La validación de formularios HTML es potente, pero no se aprovecha bien. Esto podría deberse a la complejidad de la API.
- El método
setCustomValidity es una herramienta poderosa para manejar lógica de validación compleja.
- Se presenta una forma de manejar escenarios complejos, como la validación asíncrona.
- Este artículo ofrece información útil para ayudar a los desarrolladores a aprovechar mejor la validación de formularios HTML.
1 comentarios
Comentarios de Hacker News
Los navegadores web todavía no permiten cambiar el estilo de los mensajes integrados de validación HTML, y Chrome y Firefox no siguen las guías de UI de la plataforma del sistema operativo, por lo que chocan con la estética del proyecto
<select multiple>Usar ciertos valores del atributo
type(por ejemplo,"email","number","url") puede activar el teclado óptimo en móvil y mejorar mucho la experiencia de usuarioQuienes escriben las especificaciones están desconectados del uso real; sirve para cosas simples, pero en formularios complejos es mejor hacerlo uno mismo
Se lamenta no haber valorado la simplicidad básica de los formularios y se agradece que se comparta la perspectiva de otras personas
Cuando una casilla de verificación tiene una etiqueta, se pide agregar el atributo
fora la etiqueta para que al hacer clic se pueda activar o desactivar la casillaSe ofrece un ejemplo simple sin usar React
La validación de formularios HTML es excelente, pero tiene un gran problema: no funciona en Firefox para Android
Muchos frameworks y bibliotecas ofrecen funciones de validación con estilo personalizable, así que no hace falta complicarse
Hay que tener cuidado de no abusar de la validación
Los sitios que usan por error
type=passwordpara la entrada de 2FA confunden a los administradores de contraseñas y a los navegadores