У меня есть большое количество регулярных выражений, используемых для проверки.Вместо того, чтобы вручную вводить много 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; }
}
}
);