我有很多用于验证的正则表达式。我没有为每个正则表达式手动输入许多addMethods,而是尝试使用循环。我有下面的模拟结构来保存正则表达式名称,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; }
}
}
);
答案 0 :(得分:0)
我需要使用闭包:
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]);
}