js校验表单插件

来源:互联网 发布:js实现倒计时 编辑:程序博客网 时间:2024/05/21 14:43

本demo使用jQuery,也可以去掉(需要改写里面用的jQuery的方法)。
demo github地址:[https://github.com/graceup/gu_js_lib/tree/master/基于jQuery js检验插件](https://github.com/graceup/gu_js_lib/tree/master/%e5%9f%ba%e4%ba%8ejQuery js%e6%a3%80%e9%aa%8c%e6%8f%92%e4%bb%b6)

插件源代码

 /** * 基于jQuery js 检验插件 */GuValidate = new function() {    function getFormValue($elem){        var type = $elem.attr("type") || $(this)[0].tagName;        if(type == "radio"){            if($elem.is(":checked")){                return $elem.val();            }        } else if(type == "checkbox"){            if($elem.is(":checked")){                return $elem.val();            }        } else if(type == "ui-rating") {            return $elem.rating("getValue");        } else if(type == "ui-switch") {            return $elem.uiswitch("getValue");        } else if(type == "dropdown-tree") {            return $elem.dropdowntree("getSelectIds");        } else if(type == "filtertag") {            return $elem.filtertag("getSelectFilter");        } else {            return $elem.val();        }        return null;    }    /**     * 传进来一个form对象,将这个form对象的元素转成一个bean,如果包含属性ui-ignore则忽略该表单项     */    this.formToBean = function($form){        var bean = {};        $form.find("input, select, textarea, .ui-rating, .ui-switch, .dropdown-tree, .filtertag").each(function(){            if($(this).is("[ui-ignore]")){                return ;            }            var name = $(this).attr("name");            var type = $(this).attr("type") || $(this)[0].tagName;            if(type == "button" || type == "reset" || type == "submit"){                return ;            }            var value = getFormValue($(this));            if(value != null){                if(typeof value == 'string'){                    value = $.trim(value);                }                if(type == 'checkbox'){                    if(bean[name]){                        bean[name] = value;                    } else {                        bean[name] += ',' + value;                    }                } else {                    bean[name] = value;                }            }        });        return bean;    };    /**     * 绑定表单     */    this.bindForm = function($form, formData) {        var checkedValue = 1;        $form.find("input,textarea,select,.ui-rating,.ui-switch,.dropdown-tree,.filtertag,img").each(function(){            var name = $(this).attr("name");            var type = $(this).attr("type") || $(this)[0].tagName;            if(type == "button" || type == "reset" || type == "submit" || name == ''){                return ;            }            if(formData[name] == undefined || formData[name] == null){                return ;                //formData[name] = '';            }            if(type == "radio"){                if($(this).val() == formData[name]){                    $(this).prop("checked", true);                }            } else if(type == "checkbox"){                if(checkedValue == formData[name]){                    $(this).prop("checked", true);                }            } else if(type == "ui-rating") {                $(this).rating("setValue", formData[name]);            } else if(type == "ui-switch") {                $(this).uiswitch("setValue", formData[name]);            } else if(type == "dropdown-tree") {                //to be implement            } else if(type == "filtertag") {            } else if(type == 'img'){                $(this).attr("src", formData[name]);            } else if($(this).hasClass("select2-offscreen")) {                $(this).select2("data", formData[name]);            } else {                $(this).val(formData[name]);            }        });    };    var validatePatterns = {         "required":     [/^[\S+\s*\S+]+$/ig, "不能为空!"],        "integer":      [/^\d+$/, "必须为整数!"],           "numeric":      [/^\d+(\.\d+)?$/, "不是合法的数字!"],        "currency":     [/^\d+\.\d{1,2}$/, "不是合法的货币数字!"],        "email":        [/^\w+@\w+(\.\w+)*$/, "不合法email输入!"],        "phone":        [/^[\d|-]+$/, "不合法phone输入!"],        "mustChecked":  [/0+/g, "checkbox不能为空!"],        "mustSelected": [/0+/g, "select不能为空!"],        "ipAddress":    [/^([1-9]|[1-9]\d|1\d{2}|2[0-1]\d|22[0-3])(\.(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])){3}$/, "不是有效的IP地址!"],        "netport":      [/^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/, "不合法端口!"],        "mac":          [/^[0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}[-][0-9,a-f,A-F]{2}$/, "不合法mac地址!"],         "year":         [/^(\d{4})$/, "不合法年!"],        "mouth":        [/^(\d{4})-(0\d{1}|1[0-2])$/, "不合法月!"],        "date":         [/^{\d}{4}\-{\d}{2}\-{\d}{2}$/, "不合法日!"],        "timeHour":     [/^(0\d{1}|1\d{1}|2[0-3])$/, "不合法时!"],  //HH        "timeMinute":   [/^(0\d{1}|1\d{1}|2[0-3]):([0-5]\d{1})$/, "不合法分!"], //HH:mm        "timeSeconds":  [/^(0\d{1}|1\d{1}|2[0-3]):[0-5]\d{1}:([0-5]\d{1})$/, "不合法时间!"], //HH:mm:ss        "chineseOnly":  [/[^\u4E00-\u9FA5]/g, "输入不合法!请只输入中文!"],        "mobilePhone":  [/^1[\d]{10}$/, "不合法手机号!"],        //"unicomPhone":  [/^13[0-4]{1}[\d]{8}$/, "不合法!"],        //"telecomPhone": [/^(\d{7,8})|(\d{3,4}\-\d{7,8})$/, "不合法!"],        "specials":     [/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>?]{1}[^`~!@$%^&+=\\\][\{\}:;'\,<>?]{0,}$/, "不能输入特殊字符!"],        "all":          [/^/,""],        "pattern":      [null, "数据不合法!请确认"]    };    /**     * 表单验证     * ui-validate 属性, minlength, maxlength     */    this.validateForm = function($form){        var checkAll = true;        $form.find("[ui-validate]").each(function(){            var validate = $(this).attr("ui-validate");            var pattern = $(this).attr('ui-pattern');            var objectReg = new RegExp(/\{.*\}/g);            var name = $(this).attr("name");            var vtext = $(this).attr("ui-vtext");            var type = $(this).attr("type") || $(this)[0].tagName;            if(vtext == undefined || vtext == null || vtext == ''){                vtext = name;            }            var value = $.trim(getFormValue($(this)));            function getPattern(p){                var reg = null;                p = $.trim(p);                if(p == "pattern") {                    reg = [eval("/" + pattern + "/i"), validatePatterns["pattern"][1] ];                } else {                    reg = validatePatterns[p];                  }                if(reg == null) {                    var msg = "[" + vtext + "]验证Pattern配置错误:" + p;                    alert(msg, 'warn');                    throw new Error(msg);                }                return reg;            }            var pats = null;            var allPatterns = '';            if(objectReg.test(validate)){                validate = eval("(" + validate + ")");                if(validate.minlength && !isNaN(validate.minlength)){                    if(value.length < validate.minlength){                        alert("[" + vtext + "]不能少于" + validate.minlength + "个字符!", "warn");                        $(this).focus();                        checkAll = false;                        return false;                    }                }                if(validate.maxlength && !isNaN(validate.maxlength)){                    if(value.length > validate.maxlength){                        alert("[" + vtext + "]不能超过" + validate.maxlength + "个字符!", "warn");                        $(this).focus();                        checkAll = false;                        return false;                    }                }                pats = validate.pattern.split(",");                allPatterns = validate.pattern;            } else {                pats = validate.split(",");                allPatterns = validate;            }            if(allPatterns != null && allPatterns.indexOf("required") >= 0 || value != '') {                for(var i = 0; i < pats.length; i++){                    var reg = getPattern(pats[i]);                    if(!value.match(reg[0]) || (value.match(reg[0])==-1) && type =="SELECT"){                        var vinfo = $(this).attr("ui-vinfo");                        if(vinfo == undefined || vinfo == null || vinfo == ''){                            vinfo = "[" + vtext + "]" + reg[1];                        }                        alert(vinfo, "warn");                        $(this).focus();                        checkAll = false;                        return false;                    }                }            }        });        return checkAll;    };};

demo

htm页面(js比较少,直接写到页面了)

 <!DOCTYPE html><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge" /><title>定制基于jQuery js检验插件</title></head><body>    <div id="form">        <p>            <span>姓名</span> <input type="text"                ui-validate="{pattern:'required',maxlength: 50}"                ui-vtext="姓名"  name="username"><font                color="red"> *</font>        </p>        <p>            <span>邮箱</span> <input type="text"                ui-validate="{pattern:'email,required',maxlength: 50}" ui-vtext="邮箱"              name="email"><font color="red"> *</font>        </p>        <p>            <span>ip</span> <input type="text"                ui-validate="{pattern:'ipAddress,required'}" ui-vtext="ip"                 name="ip"><font color="red"> *</font>        </p>        <p>            <span>留言</span>            <textarea rows="5" placeholder="请在此留言" type="text"                ui-validate="{pattern:'all',maxlength: 250}"                ui-vtext="留言"  name="content"></textarea>            <font color="red"> *</font>        </p>        <p>            <button onclick="getForm()">getForm</button>        </p>    </div>    <script type="text/javascript"        src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>    <script type="text/javascript" src="ui-validate.js"></script>    <script type="text/javascript">        function getForm() {            if (!GuValidate.validateForm($('#form'))) {                return;            }else{                alert('检验通过');            }            var data = GuValidate.formToBean($('#form'));            console.log(data);        }    </script></body></html>
0 0