Asp.net jQuery验证插件-在循环中使用validator.addMethod

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

我有很多用于验证的正则表达式。我没有为每个正则表达式手动输入许多addMethods,而是尝试使用循环。我有下面的模拟结构来保存regex名称、RegExp对象和验证消息

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

}