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; }
}
}
);