0
我有很多用於驗證的正則表達式。我沒有爲每個正則表達式手動輸入很多addMethods,而是嘗試使用循環。我有下面的模擬結構來保存正則表達式名稱,RegExp對象和驗證消息。jQuery驗證插件 - 在循環中使用validator.addMethod
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; }
}
}
);