2010-08-13 9 views
14

No estaba seguro de poder hacer este tipo de pregunta, pero después de ver this en Meta Stackoverflow, parece que este tipo de pregunta está bien. Bueno, en mi pregunta:Marco de validación de formularios de Javascript: solicitud de revisión

Hace unos meses escribí un marco de validación en Javascript. Sé que ya existen marcos de validación como jQuery Validation, pero quería adoptar un enfoque diferente para la validación. Los enfoques actuales se refieren a la escritura de código JavaScript para realizar la validación de los elementos del formulario. Al observar el código fuente del formulario, no es inmediatamente evidente qué validación ocurre en cada elemento. Hasta cierto punto, esto puede remediarse mediante el uso de clases CSS que especifican diferentes tipos de validación. Pero sentí que incluso esto era limitado porque no se puede personalizar fácilmente el comportamiento de la validación (mensajes de error, etc.). Quería hacer algo así como la validación basada en anotaciones en Java usando JSR-303 Bean Validation o Hibernate Validator.

Dado que HTML5 le permite agregar atributos personalizados a un elemento, calculé que podría aprovechar esto para "anotar" elementos de formulario para la validación. Así que, esencialmente, se me ocurrió esto:

<input id = "myInput" 
     name = "myInput" 
     type = "text" 
     class = "regula-validation" 
     data-constraints = '@NotEmpty @IsNumeric @Between(min=1, max=5)' /> 

Con esta idea básica en mente, he creado un marco Javascript que:

  • examina el DOM de los elementos que tienen limitaciones definidas y se une a estas limitaciones a los elementos
  • permite la creación de restricciones personalizadas
  • permite programática de unión de las restricciones
  • limitaciones valida con destino

Además, el marco tiene las siguientes características:

  • grupos de validación, similar al que se especifica en JSR-303
  • interpolación para los mensajes de error

Una vez creé mi marco Intenté obtener comentarios y revisarlos, pero no estaba seguro de a dónde ir para obtener comentarios y comentarios. Escribí algunas publicaciones en el blog sobre él y lo publiqué en Digg y Reddit (sección de programación) sin mucha suerte. Algunas personas parecían interesadas, pero no obtuve mucho más que eso.

Recientemente, en mi lugar de trabajo hemos estado modernizando una base de código heredada (JSP y servlets) y moviéndola a Spring MVC. Cuando surgió la conversación de validación, lancé mi marco a mi arquitecto principal. Hice un poco de integración y prueba de concepto y parecían interesados ​​y me dieron el visto bueno para agregarlo al proyecto. Hasta ahora, solo tenía mi propia humilde opinión de que esta sería una forma útil de hacer la validación, por lo que esto me dio la confianza de que mi idea y mi marco podrían tener algún mérito. Sin embargo, todavía necesitaba más participación y marco. Después de darme cuenta de que Stackoverflow permite este tipo de preguntas, decidí publicarlo aquí para obtener críticas constructivas, comentarios y comentarios.

Así que sin más demora, me gustaría presentar Regula. El enlace que he proporcionado va a una wiki en GitHub que tiene toda la documentación para el marco. Puede descargar la última versión (v1.1.0) desde here.

Esperamos sus comentarios.

Parte de la información adicional que no es inmediatamente relevante

que había jugado con la idea de integrar mi marco con la primavera, es decir, la traducción de las anotaciones de validación de habas en la validación del lado del cliente. Recientemente pude hacer que esto funcione, incluso con grupos de validación (aunque actualmente no hay soporte para las relaciones de herencia entre los grupos en el lado del cliente). De esta manera, simplemente tiene que anotar las propiedades del campo con las restricciones de validación, y el código de validación del lado del cliente se genera automáticamente. Sin embargo, soy un novato de primavera y por lo tanto mi método probablemente no es tan limpio. Me gustaría obtener algunos comentarios sobre esto también, por lo que si alguien está interesado, por favor hágamelo saber. Idealmente (y espero no ser demasiado pretencioso) me gustaría contactar a la gente de Spring y ver si están interesados ​​en esto.

+0

Realmente no tengo un estuche de uso para realmente ejercitarlo; pero votaré y preferiré, ya que parece un buen concepto. Tengo curiosidad de ver lo que las personas hacen de eso. Mi elección de framework web, wicket, elimina la necesidad de la validación de JavaScript, ya que proporciona las facultades para enviar datos y generar comentarios del servidor a través de la solicitud de ajax. Sé que otros marcos, como ASP.NET, alientan la validación del cliente para la retroalimentación dinámica (aunque siempre se necesita validar el servidor al enviar el formulario). – RMorrisey

+0

@RMorrisey ¡Gracias por tu comentario! No he probado wicket, pero me gustaría echarle un vistazo en algún momento. Creo que JSF también hace algo similar a lo que describes. En el trabajo tenemos algo de validación que solo se realiza en el lado del servidor. Con mi marco de trabajo, he podido hacerlo desde el lado del cliente de la manera en que lo describes. Tengo una restricción personalizada con un validador que hace una solicitud de AJAX para realizar la validación. ¡Gracias una vez más por sus comentarios! –

+0

Sé que está fuera de tema y fuera de tiempo para esto, pero ¿cómo inyectó la anotación a las restricciones de datos? Llegué a la pregunta mientras buscaba cómo hacer algo similar (regula es más que suficiente para mis necesidades) –

Respuesta

7

Ya me gusta mucho, mantiene mi html limpio y la capacidad de crear validadores personalizados es genial. Una cosa que he añadido era una mano corta para la unión de la validación y presentar funciones, y lo envolvió como un plugin de jQuery:

if (jQuery) { 
    (function($) 
    { 
     $.regula = function(formId, callback) 
     { 
      regula.bind(); 

      $("#" + formId).submit(function() 
      { 
       var validationResults = regula.validate(); 

       if (validationResults.length > 0) 
       { 
        if (callback) 
         callback(validationResults); 

        return false; 
       } 

       return true; 
      }); 
     }; 
    })(jQuery); 
} 

De hecho, acabo de blogged al respecto a como estoy de que impresionado con lo limpio y fácil es. Todavía voy a pasar tiempo revisando tu fuente, para ver cómo lo lograste, pero es un gran comienzo :)

En lo que respecta a la integración de tu framework, trabajo principalmente con ASP.NET MVC, y lo haría Sea interesante ver cómo se traduce la lógica de validación del lado del servidor en las restricciones del lado del cliente. Algo que podría revisar en el próximo mes más o menos.

+0

Gracias por los comentarios y la publicación del blog Matthew! Trabajo sobre todo en el lado de Java de las cosas; ¡Nunca he hecho .NET, pero me interesaría investigarlo! –

+1

He estado jugando con eso un poco más y encontré una forma de generar automáticamente restricciones de datos basadas en los atributos proporcionados por el espacio de nombres DataAnnotations de .NET. Sé que eres un tipo Java, pero si estás interesado en ver cómo lo hice, voy a actualizar mi blog con un ejemplo esta noche. Me imagino que el concepto de hacerlo con Beans en primavera es esencialmente similar aunque con un sabor Java ... –

Cuestiones relacionadas