Javascript jQuery验证:抽象规则

Javascript jQuery验证:抽象规则,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,Im使用jQuery的验证,可在此处找到: 我目前有一些“自定义”规则,如下所示: else if(valID =="#shipForm") { $("#fName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}}); $("#l

Im使用jQuery的验证,可在此处找到:

我目前有一些“自定义”规则,如下所示:

else if(valID =="#shipForm")
        {
            $("#fName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}});
            $("#lName").rules("add",{regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",minlength: 2,messages:{minlength:"Must be 2 characters."}});
            $("#sAdd1").rules("add",{stringCheck: "",minlength:2,messages:{minlength:"Enter your complete street address."}});
            $("#sAdd2").rules("add",{stringCheck: ""});
            $("#city").rules("add",{stringCheck: "",minlength:2,messages:{minlength:"Enter the full name of your city"}});
            $("#zipcode").rules("add",{stripZip: ""});
            $("#phoneIn").rules("add",{stripPhone: "",maxlength:15,messages:{maxlength:"Phone number exceeds allowed length"}});
            $("#altPhone").rules("add",{stripPhone: ""});
            $("#state").rules("add",{checkMenu: ""});
            $("#country").rules("add",{checkMenu: ""});
        }
我希望做的事。。正在抽象.rules并能够从函数中获取它们。我的问题是它们不仅仅是字符串,所以我不知道如何从另一个函数中获取信息并填充.rules(“规则的传递值”)

这不起作用,但这是一个我希望的例子

function getRule(rule)
{
    switch (rule)
    {
        case "fName":
            return "\"add\",{regexName: \"^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$\",minlength: 2,messages:{minlength:\"Must be 2 characters.\"}}";
            break;
    }
}
但我显然不能把一个字符串传回去,然后再把它放回规则中


有什么想法吗?

您可以将规则存储在地图中:

var rules = {
    fName: {
        regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",
        minlength: 2,
        messages: {
            minlength: "Must be 2 characters."
        }
    },
    lName: { // ... }
    // ...
};
并将其全部应用于:

for (var id in rules) {
    $("#" + id).rules("add", rules[id]);
}
注意:
返回后不需要
中断


注2:为便于阅读,请包装并缩进对象文字。

您可以返回一个对象

function getRule(rule) 
{ 
    switch (rule) 
    { 
        case "fName": 
            return {
               param1 : "add", 
               param2 : {
                    regexName: "^[a-zA-Z]+(([\'\-][a-zA-Z])?[a-zA-Z]*)*$",
                    minlength: 2,
                    messages:{
                         minlength:"Must be 2 characters."
                    }
                }
            }; 
    } 
} 
现在,如果调用getRule,它将返回如下对象

var myruleDef = getRule(rule);

$(selector).rules(myruleDef.param1, myruleDef.param2);

考虑到它的使用方式,可能返回一个数组而不是一个对象?这样他就可以直接打电话给
.rules(myruleDef)
不?谢谢你的留言。我来研究一下这个方法