js校验表单插件

本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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值