javascript - jquery正则表达式验证错误

标签 javascript jquery regex codeigniter

我是编程新手。我正在尝试验证表单。我用 php 做到了(我使用的是 Codeigniter),没有任何问题,工作正常。

说到 jquery 我遇到了麻烦。例如,对于用户名,如果输入有效,则应显示“确定”图标。为此,我有这个:

var FormValidation = function () {

var handleValidation2 = function() {
    // for more info visit the official plugin documentation: 
    // http://docs.jquery.com/Plugins/Validation

        var form2 = $('#form-val');
        var error2 = $('.alert-error', form2);
        var success2 = $('.alert-success', form2);

        //IMPORTANT: update CKEDITOR textarea with actual content before submit
        form2.on('submit', function() {
            for(var instanceName in CKEDITOR.instances) {
                CKEDITOR.instances[instanceName].updateElement();
            }
        })

        form2.validate({
            errorElement: 'span', //default input error message container
            errorClass: 'help-inline', // default input error message class
            focusInvalid: false, // do not focus the last invalid input
            ignore: "",
            rules: {

                username: {
                    minlength: 2,
                    maxlength: 15,
                    regex: "^[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$",
                    required: true
                },

                name: {
                    minlength: 2,
                    maxlength: 50,
                    // regex: ,
                    required: true
                },

                lastname: {
                    minlength: 2,
                    maxlength: 50,
                    required: true
                },

                gender: {
                    required: true
                },

                date_born: {
                    required: true
                },

                email: {
                    required: true,
                    email: true
                },

                status: {
                    required: true
                },

                member_id: {
                    minlength: 5,
                },

                documentType_id: {
                    required: true
                },

                documentn: {
                    required: true,
                    minlength: 2
                },
                address_street: {
                    required: true
                },

                address_number: {
                    required: true
                },

                address_floor: {
                    required: false
                },

                zipcode: {
                    required: true
                },

                city: {
                    required: true
                },

                state: {
                    required: true
                },

                country_id: {
                    required: true
                },

                phone: {
                    required: true
                },

                cellphoneNumber: {
                    required: true
                },

                cellCompany: {
                    required: true
                },

                cellbrand: {
                    required: true
                },

                marital_status: {
                    required: true
                },

                sons: {
                    required: true
                },
            },

            messages: { // custom messages for radio buttons and checkboxes
                username: {
                    required: "Este campo es requerido",
                    minlength: "El nombre de usuario debe tener como mínimo 2 caracteres",
                    maxlength: "El nombre de usuario debe tener como máximo 15 caracteres",  
                },

                membership: {
                    required: "Please select a Membership type"
                },
                service: {
                    required: "Please select  at least 2 types of Service",
                    minlength: jQuery.format("Please select  at least {0} types of Service")
                }
            },

            errorPlacement: function (error, element) { // render error placement for each input type
                if (element.attr("name") == "education") { // for chosen elements, need to insert the error after the chosen container
                    error.insertAfter("#form_2_education_chzn");
                } else if (element.attr("name") == "membership") { // for uniform radio buttons, insert the after the given container
                    error.addClass("no-left-padding").insertAfter("#form_2_membership_error");
                } else if (element.attr("name") == "editor1" || element.attr("name") == "editor2") { // for wysiwyg editors
                    error.insertAfter($(element.attr('data-error-container'))); 
                } else if (element.attr("name") == "service") { // for uniform checkboxes, insert the after the given container
                    error.addClass("no-left-padding").insertAfter("#form_2_service_error");
                } else {
                    error.insertAfter(element); // for other inputs, just perform default behavior
                }
            },

            invalidHandler: function (event, validator) { //display error alert on form submit   
                success2.hide();
                error2.show();
                App.scrollTo(error2, -200);
            },

            highlight: function (element) { // hightlight error inputs
                $(element)
                    .closest('.help-inline').removeClass('ok'); // display OK icon
                $(element)
                    .closest('.control-group').removeClass('success').addClass('error'); // set error class to the control group
            },

            unhighlight: function (element) { // revert the change done by hightlight
                $(element)
                    .closest('.control-group').removeClass('error'); // set error class to the control group
            },

            success: function (label) {
                if (label.attr("for") == "service" || label.attr("for") == "membership") { // for checkboxes and radio buttons, no need to show OK icon
                    label
                        .closest('.control-group').removeClass('error').addClass('success');
                    label.remove(); // remove error label here
                } else { // display success icon for other inputs
                    label
                        .addClass('valid').addClass('help-inline ok') // mark the current input as valid and display OK icon
                    .closest('.control-group').removeClass('error').addClass('success'); // set success class to the control group
                }
            },

            submitHandler: function (form) {
                success2.show();
                error2.hide();
            }

        });

        $('#form-val').select2({
            placeholder: "Select an Option",
            allowClear: true
        });

        //apply validation on chosen dropdown value change, this only needed for chosen dropdown integration.
        $('.chosen, .chosen-with-diselect', form2).change(function () {
            form2.validate().element($(this)); //revalidate the chosen dropdown value and show error or success message for the input
        });

         //apply validation on select2 dropdown value change, this only needed for chosen dropdown integration.
        $('.select2', form2).change(function () {
            form2.validate().element($(this)); //revalidate the chosen dropdown value and show error or success message for the input
        });
}

return {
    main function to initiate the module
    init: function () {           
        handleValidation2();
    }
};
}();

这是完整的代码,尚未完成更改。问题是,如果输入少于 2 个字符或大于 15 个字符,则会出现错误,但是当输入正确时,不会出现图标 ok,并且在检查时出现以下错误:

未捕获类型错误:无法调用未定义的方法“call”

如果我删除规则“re​​gex”图标,则会出现“ok”。但正如您在代码片段中看到的那样,对于该字段,它不能正常工作。

问题可能是什么?提前谢谢。

最佳答案

如果您想匹配正则表达式而不编写自定义方法(如 Hayzeus 中的)答案,请加载 jquery-validate 附加方法:

<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/additional-methods.min.js"></script>

然后您可以使用pattern验证方法:

            username: {
                minlength: 2,
                maxlength: 15,
                pattern: "[a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*",
                required: true
            },

该方法自动使用 ^$ 包装模式,因此您的正则表达式中不需要它们。

关于javascript - jquery正则表达式验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981370/

相关文章:

javascript - 正则表达式 - 用图像标签替换 URL

PHP 正则表达式将空格替换为单个字母后的空格

javascript - HTML5 音频播放器。无法更改 src 元素

单击按钮时 JavaScript 显示错误

javascript - 移动类型化 Javascript 数组的值?

jquery - 为什么 addClass 不起作用?

javascript - 使用 Javascript 单击按钮或图像时表格列会折叠

jquery - 使用 JSF 和 jQuery 绑定(bind)基于 ID 的事件

javascript - JS 在表单提交之前输出所有检查的输入字段值的总和(仅数字)

regex - 需要帮助重写 Regex 只有 1 个捕获组