Asp.net jQuery验证插件-在循环中使用validator.addMethod
我有很多用于验证的正则表达式。我没有为每个正则表达式手动输入许多addMethods,而是尝试使用循环。我有下面的模拟结构来保存regex名称、RegExp对象和验证消息Asp.net jQuery验证插件-在循环中使用validator.addMethod,asp.net,javascript,jquery,validation,Asp.net,Javascript,Jquery,Validation,我有很多用于验证的正则表达式。我没有为每个正则表达式手动输入许多addMethods,而是尝试使用循环。我有下面的模拟结构来保存regex名称、RegExp对象和验证消息 function RegExs(exprName, expr, exprVM) { this.exprName = exprName; this.expr = expr; this.exprVM = exprVM; } 填充上述数组后,我循环并执行addMethods,以使更新和维护更加容易: for
function RegExs(exprName, expr, exprVM) {
this.exprName = exprName;
this.expr = expr;
this.exprVM = exprVM;
}
填充上述数组后,我循环并执行addMethods,以使更新和维护更加容易:
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; }
);
}
但是,验证器似乎没有接收正则表达式。它确实获得了名称和验证消息。有什么线索吗
更新:更正:验证程序正在提取函数数组,但数组中的最后一个将应用于每个输入。因此,如果我有:
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)
];
emailLength正则表达式应用于每个输入。下面,应将addrCustName应用于输入字段,但使用emailLength
$("[id$='_tbFName']").rules("add",
{
required: true,
addrCustName: true,
messages: {
required: "First name required",
addrCustName: function(value, element) { return regExAddrCustNameVM; }
}
}
);
我需要使用一个闭包:
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]);
}