¿Cómo puedo verificar la longitud exacta usando jQuery Validation?

Usando el complemento de validación de jQuery para validar formularios, ¿cómo confirmarías que una cadena tiene exactamente X caracteres?

Como no hay (actualmente) un método incorporado para esto, necesitarías agregar tu propio método. Esto funcionaría:

jQuery.validator.addMethod("exactlength", function(value, element, param) { return this.optional(element) || value.length == param; }, $.validator.format("Please enter exactly {0} characters.")); 

Que luego podría ser utilizado de esta manera:

 $("#formtovalidate").validate({ rules: { somefield: { exactlength: 10 } }); 

Actualización – Cómo funciona

Me han preguntado cómo funciona esto. No sé todos los detalles; He modelado este método en los ya existentes. Sin embargo, este es mi mejor bash de explicarlo.

  • La función toma en value , element y param .
    • value es el valor introducido en el campo que se valida
    • element es el propio campo.
    • param es lo que viene después del tipo de regla y dos puntos. En el ejemplo anterior, es el 10 en exactlength: 10
  • La siguiente línea es una statement de return . Esto dará el veredicto final del método de validación al código que lo llamó. Cualquier método de validación que devuelva true significa “este campo pasa la validación”. Devolverá el valor de la línea en la que está.
  • A la return le siguen dos declaraciones, separadas por un operador ‘o’ ( || ).
    • El || operador significa ‘evaluar el elemento que queda de esto. Si es verdad, devuelve la verdad. Si no, prueba el de la derecha. Si es verdad, devuelve la verdad. De lo contrario, devuelve falso.
      • El elemento de la izquierda es this.optional(element) . Si el elemento no es requerido en sus reglas, esto devolverá verdadero, y también lo hará la validación. Lo que significa ‘Si no te digo que este campo es obligatorio, no me importa si lo valida’.
      • Si el campo es requerido, nos movemos hacia el lado derecho de la || . Esta es la prueba de validación real. Compara la longitud de la entrada del campo con la longitud que especificó que debe ser. Si son iguales, devuelve true, el método devuelve true y la validación pasa. De lo contrario, la validación falla.

Eso es todo. Para obtener más ayuda, consulte la documentación , en particular la parte sobre los métodos de validación personalizados .

ejemplo:

 rules : { "someFieldName":{digits:true,minlength:20,maxlength:20} } 

También puede hacer que el método rangelength existente rangelength rango exacto proporcionando un mensaje dynamic como este:

 $.extend($.validator.messages, { rangelength: function(args, inputElement) { var isExactRange, min, max; // Cast arguments as numbers min = Number(args[0]); max = Number(args[1]); isExactRange = min === max; if (isExactRange) { return 'Please enter exactly ' + min + ' characters.'; } return 'Please enter between ' + min + ' and ' + max + ' characters.'; } ); 

Como se puede ver, puede generar mensajes sobre la marcha en función de los argumentos pasados ​​a los métodos de validación. Las devoluciones de llamada de mensaje pasan los argumentos del método de validación como primer argumento y el elemento de entrada se valida como segundo argumento.

Esto hace posible devolver un mensaje cuando se especifica un rango exacto, pero otro si los límites superior e inferior no son los mismos.

Para rangelength mensaje de rangelength predeterminada, reemplace

 'Please enter between ' + min + ' and ' + max + ' characters.' 

con

 $.validator.messages.rangelength 

Sería bueno si la documentación oficial se actualizara, ya que es difícil de navegar y no describe todas las funcionalidades del complemento.

La forma más fácil es usar los métodos de validación existentes a través de los atributos de datos, luego simplemente configure su propio mensaje de validación para mayor claridad.