【问题标题】:jQuery validate plugin : adding a custom validator to accept letters only?jQuery 验证插件:添加自定义验证器以仅接受字母?
【发布时间】:2010-11-06 21:56:25
【问题描述】:

这是很久以前提出的问题:jQuery validate plugin : accept letters only?

我正在使用来自http://bassistance.de/jquery-plugins/jquery-plugin-validation/的验证插件

我试图找到一种方法,让我的一些表单字段只接受字母,不接受数字,特殊字符等......

问题是这样回答的:

“只需​​添加一个自定义验证器,然后像这样使用它:”

jQuery.validator.addMethod("accept", function(value, element, param) { return value.match(new RegExp("^" + param + "$")); });

    rules: { 
  field: { accept: "[a-zA-Z]+" } 
} 

但是,我似乎无法应用该解决方案。

以下是我的代码,请告诉我如何进行更改。

<SCRIPT TYPE="text/javascript">
$.validator.setDefaults({
    submitHandler: function(form) { form.submit();  }
});

$().ready(function() {

    // validate signup form on keyup and submit
    $("#signUp").validate({
        rules: {
            fname: {
                required: true,
                minlength: 2
                },  
            lname: "required",
         user1: {
                required: true,
                minlength: 4

            },
            captcha: {

                required: true,
                minlength: 2
            },
            confirm_captcha: {
                required: true,
                equalTo: "#captcha"
            },
            email: {
                required: true,
                email: true
            },
            confirm_email: {
                required: true,
                equalTo: "#email"
            },
            topic: {
                required: "#newsletter:checked",
                minlength: 2
            },
            agree: "required"
        },
        messages: {
            fname: {
                required: " Please enter your first name",
                minlength: " Your name must consist of at least 3 characters"
            },
            lname: " Please enter your last name",
            user1: {
                required: " Please enter a username",
                minlength: " Username must consist of at least 4 characters"
            },

            confirm_captcha: {
                required: " Anti-SPAM required",
                equalTo: " Please solve the anti-SPAM equation correctly"
            },
            confirm_email: {
                required: " Please confirm your email",
                equalTo: " Please enter the same email as above"
            },
            email: " Please enter a valid email address",

            agree: " Please accept our policy"
        }
    });

    // propose username by combining first- and lastname
    $("#user1").focus(function() {
        var fname = $("#fname").val();
        var lname = $("#lname").val();
        if(fname && lname && !this.value) {
            this.value = fname + "." + lname;
        }
    });

    // check if confirm email is still valid after password changed
    $("#email").blur(function() {
        $("#confirm_email").valid();
    });

    // check if confirm captcha is still valid after password changed
    $("#captcha").blur(function() {
        $("#confirm_captcha").valid();
    });

    //code to hide topic selection, disable for demo
    var newsletter = $("#newsletter");
    // newsletter topics are optional, hide at first
    var inital = newsletter.is(":checked");
    var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
    var topicInputs = topics.find("input").attr("disabled", !inital);
    // show when newsletter is checked
    newsletter.click(function() {
        topics[this.checked ? "removeClass" : "addClass"]("gray");
        topicInputs.attr("disabled", !this.checked);
    });
});
</SCRIPT>

【问题讨论】:

    标签: jquery plugins validation


    【解决方案1】:

    下面假设您只希望 fname 是字母。

    搜索 ALPHA_REGEX 以查看我在您的代码中添加部分的位置。

    另外,lname: "required", 行是错字吗?我真的不知道它是否需要lname: {"required":true},

    <SCRIPT TYPE="text/javascript">
    
    $.validator.setDefaults({ submitHandler: function(form) { form.submit(); } });
    
    jQuery.validator.addMethod("regex", function(value, element, param) { return value.match(new RegExp("^" + param + "$")); });
    var ALPHA_REGEX = "[a-zA-Z]*";
    
    $().ready(function() {
        // validate signup form on keyup and submit
        $("#signUp").validate({
            rules: {
                fname: {
                    regex: ALPHA_REGEX,
                    required: true,
                    minlength: 2
                    },  
                lname: "required",
                user1: {
                    required: true,
                    minlength: 4
    
                },
                captcha: {
    
                    required: true,
                    minlength: 2
                },
                confirm_captcha: {
                    required: true,
                    equalTo: "#captcha"
                },
                email: {
                    required: true,
                    email: true
                },
                confirm_email: {
                    required: true,
                    equalTo: "#email"
                },
                topic: {
                    required: "#newsletter:checked",
                    minlength: 2
                },
                agree: "required"
            },
            messages: {
                fname: {
                    required: " Please enter your first name",
                    minlength: " Your name must consist of at least 3 characters"
                },
                lname: " Please enter your last name",
                user1: {
                    required: " Please enter a username",
                    minlength: " Username must consist of at least 4 characters"
                },
    
                confirm_captcha: {
                    required: " Anti-SPAM required",
                    equalTo: " Please solve the anti-SPAM equation correctly"
                },
                confirm_email: {
                    required: " Please confirm your email",
                    equalTo: " Please enter the same email as above"
                },
                email: " Please enter a valid email address",
    
                agree: " Please accept our policy"
            }
        });
    
        // propose username by combining first- and lastname
        $("#user1").focus(function() {
            var fname = $("#fname").val();
            var lname = $("#lname").val();
            if(fname && lname && !this.value) {
                this.value = fname + "." + lname;
            }
        });
    
        // check if confirm email is still valid after password changed
        $("#email").blur(function() {
            $("#confirm_email").valid();
        });
    
        // check if confirm captcha is still valid after password changed
        $("#captcha").blur(function() {
            $("#confirm_captcha").valid();
        });
    
        //code to hide topic selection, disable for demo
        var newsletter = $("#newsletter");
        // newsletter topics are optional, hide at first
        var inital = newsletter.is(":checked");
        var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
        var topicInputs = topics.find("input").attr("disabled", !inital);
        // show when newsletter is checked
        newsletter.click(function() {
            topics[this.checked ? "removeClass" : "addClass"]("gray");
            topicInputs.attr("disabled", !this.checked);
        });
    });
    

    【讨论】:

    • 另一个快速问题。验证器中是否有“maxlength”参数?我有一个 minlength 参数。我试过 maxlength,但效果不好。
    • Alex,我有一个非常相似的问题...stackoverflow.com/questions/54382230/…希望你有时间去看看。谢谢
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多