2010-04-29 5 views
0

J'ai un bon nombre d'expressions régulières utilisées pour la validation. Au lieu de taper manuellement plusieurs addMethods pour chaque regex, j'ai essayé d'utiliser une boucle. J'ai la structure simulée ci-dessous pour contenir le nom de regex, l'objet RegExp et le message de validation.JQuery Validation Plugin - Utilisation de validator.addMethod en boucle

function RegExs(exprName, expr, exprVM) { 
    this.exprName = exprName; 
    this.expr = expr; 
    this.exprVM = exprVM; 
} 

Après avoir rempli un tableau de ce qui précède, je boucle à travers et ne les addMethods, pour rendre les choses beaucoup plus faciles à mettre à jour et maintenir:

for (i in pgRegExs) { 

    $.validator.addMethod(pgRegExs[i].exprName, 
     function(value, element) { 
      return this.optional(element) || pgRegExs[i].expr.test(value); 
     }, 
     function(value, element) { return pgRegExs[i].exprVM; } 
    ); 
} 

Cependant, le validateur ne semble pas être la cueillette l'expression régulière. Il obtient le nom et le message de validation. Des indices?

Mise à jour: Correction: Le validateur récupère le tableau de fonctions, mais le dernier du tableau est appliqué à chaque entrée. Donc, si j'ai:

pgRegExs = [ 
    new RegExs("addrCustName", regExAddrCustName, regExAddrCustNameVM), 
    new RegExs("addrStreet", regExZipCodeLng, regExZipCodeLngVM), 
    new RegExs("addrCity", regExZipCodeLng, regExZipCodeLngVM), 
    new RegExs("zipcodeLng", regExZipCodeLng, regExZipCodeLngVM), 
    new RegExs("emailFormat", regExEmailAddr, regExEmailAddrVM), 
    new RegExs("emailLength", regExEmailAddrLen, regExEmailAddrLenVM) 
]; 

L'expression régulière emailLength est appliquée à chaque entrée. Ci-dessous, addrCustName doit être appliqué au champ de saisie, mais la propriété emailLength est utilisée à la place.

$("[id$='_tbFName']").rules("add", 
    { 
     required: true, 
     addrCustName: true, 
     messages: { 
      required: "First name required", 
      addrCustName: function(value, element) { return regExAddrCustNameVM; } 
     } 
    } 
); 

Répondre

0

je devais utiliser une fermeture:

for (i in pgRegExs) { 

    (function(pgRegEx) { 

     $.validator.addMethod(pgRegEx.exprName, 
      function(value, element) { 
       return this.optional(element) || pgRegEx.expr.test(value); 
      }, 
      function(value, element) { return pgRegEx.exprVM; } 
     ); 

    })(pgRegExs[i]); 

} 
Questions connexes