jquery表单自定义验证插件

//正则表达式
var map = new Map();
map.put("*", /[\w\W]+/);
map.put("*6-16", /^[\w\W]{6,16}$/);
map.put("n", /^\d+$/);
map.put("n6-16", /^\d{6,16}$/);
map.put("s", /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]+$/);
map.put("s6-16", /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]{6,16}$/);
map.put("p", /^[0-9]{6}$/);//邮编
map.put("m", /^13[0-9]{9}$|14[0-9]{9}|15[0-9]{9}$|18[0-9]{9}$/);//手机号码
map.put("e", /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/);//email
map.put("url", /^(http|https):\/\/(\w+:\/\/)?\w+(\.\w+)+.*$/);//url地址
map.put("image", /^(http|https):\/\/.*(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png)$/);//图片
map.put("integer", /^[1-9]\d*$/);//大于0的正整数
map.put("hj", /(\S*?) [^>]*>.*?<\/\1>|<.*?/);//过滤html标签和javascript标签


(function($,win){
    Validform = {
        matchReg : function(datatype){
            //匹配返回正则表达式 有3个比较特殊 所有特殊处理一下
            //这3个是因为有长度判断 要动态修改正则表达式
            var reg1 = /^\*\d{1,}-\d{1,}$/;
            var reg2 = /^n\d{1,}-\d{1,}$/;
            var reg3 = /^s\d{1,}-\d{1,}$/;
            if(reg1.test(datatype) || reg2.test(datatype) || reg3.test(datatype)){
                //把开始长度和结束长度截取出来
                var index = datatype.indexOf("-");
                var nums =new Array();
                nums[0] = datatype.substring(1,index);
                nums[1] = datatype.substring(index+1,datatype.length);
                //替换数字
                var reg;
                switch (datatype.substring(0,1)) {
                ///^[\w\W]{6,16}$/
                case "*": reg = new RegExp("^[\\w\\W]{"+nums[0]+","+nums[1]+"}$"); break;
                case "n": reg = new RegExp("^\\d{"+nums[0]+","+nums[1]+"}$"); break;
                case "s": reg = new RegExp("^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w\\.\\s\\\\/]{"+nums[0]+","+nums[1]+"}$"); break;
                }
                return reg;
            }else{
                return map.get(datatype);
            }
        }
    }
})(jQuery,window);

    HaHaUtil = {
            checkFrom : function(formId){
                var form = $("#"+formId)[0];
                //遍历表单下面的元素
                for(var i=0;i<form.length;i++){
                    if(!HaHaUtil.resultCheck(form[i])){
                        return false;
                    }
                }
                return true;
            },
            resultCheck : function(obj){
                var tagName = obj.tagName;
                switch(tagName)
                {
                case "INPUT": 
                case "TEXTAREA": 
                    $item = $(obj);
                    var dataType = $item.attr("dataType");
                    //没有验证标签  就不校验了
                    if(dataType == null){
                        return true;
                    }else{
                        //获取 dataType  可以有多个验证用|分割开
                        var reType = dataType.split("|");
                        //把表单值前后的空格去掉
                        var f_value = $item.val();
                        if(f_value.indexOf(" ")!=-1){
                            //说明有空格 也有可能中间有空格  中间有空格就不会去掉
                            $item.val($.trim(f_value));
                        }
                        var tipId = $item.attr("tipId");
                        $("#"+tipId).html("");

                        for(var i=0;i<reType.length;i++){
                            //如果第一个正则是 empty 说明是可以没值
                            //如果有值 在根据正则校验
                            if(reType[i] == "empty"){
                                if($item.val() == ""){
                                    //就不校验了  
                                    return true;
                                    break;
                                }else{
                                    //继续校验
                                    continue;
                                }

                            }
                            if($("."+tipId).is(":hidden")){
                                //如果是隐藏的菜单不校验
                                continue;
                            }
                            //获取返回的正则表达式
                            var reg = Validform.matchReg(reType[i]);
                            if(!reg.test($item.val())){
                                //判断不通过
                                 $("#"+tipId).html($item.attr("errormsg"));
                                 return false;
                                break;
                            }else{
                                 //判断通过  继续校验
                                 continue;
                            }
                        }
                        return true;
                    }
                    break;
                    //没有匹配到标签就返回false
                    default : return true;
                }

            }




}


Array.prototype.remove = function(s) {
        for (var i = 0; i < this.length; i++) {
            if (s == this[i])
                this.splice(i, 1);
        }
}

function Map() {
        /** 存放键的数组(遍历用到) */
        this.keys = new Array();
        /** 存放数据 */
        this.data = new Object();

        /**
         * 放入一个键值对
         * @param {String} key
         * @param {Object} value
         */
        this.put = function(key, value) {
            if(this.data[key] == null){
                this.keys.push(key);
            }
            this.data[key] = value;
        };

        /**
         * 获取某键对应的值
         * @param {String} key
         * @return {Object} value
         */
        this.get = function(key) {
            return this.data[key];
        };

        /**
         * 删除一个键值对
         * @param {String} key
         */
        this.remove = function(key) {
            this.keys.remove(key);
            this.data[key] = null;
        };

        /**
         * 遍历Map,执行处理函数
         * 
         * @param {Function} 回调函数 function(key,value,index){..}
         */
        this.each = function(fn){
            if(typeof fn != 'function'){
                return;
            }
            var len = this.keys.length;
            for(var i=0;i<len;i++){
                var k = this.keys[i];
                fn(k,this.data[k],i);
            }
        };

        /**
         * 获取键值数组(类似Java的entrySet())
         * @return 键值对象{key,value}的数组
         */
        this.entrys = function() {
            var len = this.keys.length;
            var entrys = new Array(len);
            for (var i = 0; i < len; i++) {
                entrys[i] = {
                    key : this.keys[i],
                    value : this.data[i]
                };
            }
            return entrys;
        };

        /**
         * 判断Map是否为空
         */
        this.isEmpty = function() {
            return this.keys.length == 0;
        };

        /**
         * 获取键值对数量
         */
        this.size = function(){
            return this.keys.length;
        };

        /**
         * 重写toString 
         */
        this.toString = function(){
            var s = "{";
            for(var i=0;i<this.keys.length;i++,s+=','){
                var k = this.keys[i];
                s += k+"="+this.data[k];
            }
            s+="}";
            return s;
        };
}   


这个是一个js插件保存.js引用就可以了,特点灵活可以自定义校验内容原理使用正则表达式,对于隐藏的表单不校验

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<%@ include file="/common/taglibs.jsp"%>
<%@page contentType="text/html;charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>

<html>
<head>
<title>新建商品</title>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/v0/scripts/commodity/common_functions.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/v0/scripts/commodity/check_data.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/v0/scripts/commodity/commodity_create.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/v0/scripts/jquery/jquery.form.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/v0/scripts/haha.js"></script>
<script type="text/javascript"
    src="<%=request.getContextPath()%>/static/v0/scripts/haha_upload.js"></script>

<script type="text/javascript">
     j = 1; 
    $(function(){
        updateDiscountPercentage();          
        $("#btn_add2").click(function(){ 
            //var newNode='<div id="fileSelectDiv_'+j+'" class="form-inline"><div class="form-group">';
            //newNode +='<input id="detailImgFiles_'+j+'" name="detailImgFiles" type="file"  /></div>';
            //newNode +='<div class="form-group"><input type="button" value="删除"  onclick="delDivRow(\'fileSelectDiv_'+j+'\')"/></div><div class="form-group">';
            //newNode +='<span id="detailImgFiles_'+j+'_span" class="sr-text highlight"></span>';
            //newNode +='</div></div>';
            //$("#newUploadTd").append(newNode);     
            var newNode2='<div class="form-inline" id="newImgDiv_'+j+'"><div class="form-group">';
            newNode2+='<textarea dataType="empty|image|*1-500" tipId="detail_span" errormsg="请输入合法的图片链接,并小于500个字符"   id="newDetailImgs" name="newDetailImgs" rows="1" cols="100"></textarea>';
            newNode2+='</div><div class="form-group">&nbsp;&nbsp;';
            newNode2+='<input type="button" id="btn_delOld2" value="删除" onclick="delDivRow(\'newImgDiv_'+j+'\')"></div></div>';
            $("#showResultTd").append(newNode2);     
            j = j + 1;  
        });  

        $("input[name='needRobert']").click(function(){
            var need=$('input:radio[name="needRobert"]:checked').val();
            $("tr[name='Show']").toggle(); 
            /* if(need==1){
                $("tr[name='Show']").css('display','block'); 
            }else{
                $("tr[name='Show']").css('display','none'); 
            } */
        });
    }); 


    </script>
</head>
<body>
    <form:form method="post" action="#" id="hiddenForm" name="hiddenForm">
        <input type="hidden" name="selectedCommodityItemNo"
            id="selectedCommodityItemNo" value="" />
        <input type="hidden" name="imgFileName" id="imgFileName" value="" />
    </form:form>

    <form:form commandName="currentCommodity" name="detailDataForm"
        id="detailDataForm" method="post" enctype="multipart/form-data">

        <div id="errorMessage"
            style="color: #ff2233; font-size: 14px; text-align: center;">
            <c:if test="${not empty errorMessage }">
                <c:out value="${errorMessage }" />
            </c:if>
        </div>
        <input type="hidden" name="searchFunctionEntry"
            id="searchFunctionEntry" value="${searchFunctionEntry}" />
        <div id="content" class=" yui-g member_">
            <legend>新建商品</legend>
            <div class="h10px"></div>
            <fieldset>
                <div class="form-inline">
                    <%-- <div class="form-group">
                <input type="button" name="save_btn" class="btn btn-default toTop_o_deg btn_width_1" onclick="createNewAppointment();" value='<fmt:message key="button.save"/>' id="save_btn"/>
            </div>--%>
                    <div class="form-group">
                        <input type="button" id="return_btn" name="return_btn"
                            class="btn btn-default" value="返回列表"
                            onclick="returnToSeachFunction('${searchFunctionEntry}');" />
                    </div>
                </div>
            </fieldset>

            <div class="h10px"></div>
            <table border="0" width="100%">
                <tbody>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="commodityTitle" class="sr-outer">商品标题:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:textarea path="title" id="title" dataType="s1-50"
                                        tipId="title_span" errormsg="请输入合法字符的标题,并小于50个字符" name="title"
                                        rows="1" cols="100" />
                                </div>
                                <div class="form-group">
                                    <span id="title_span" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="keyword" class="sr-outer">关键字:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:textarea dataType="empty|s1-50" tipId="keyword_span"
                                        errormsg="请输入合法字符的关键字,并小于50个字符" path="keyword" id="keyword"
                                        name="keyword" rows="1" cols="100" />
                                </div>
                                <div class="form-group">
                                    <span id="keyword_span" class="sr-text highlight"></span>
                                </div>
                            </div>
                        </td>
                    </tr>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="commodityType" class="sr-outer">商品分类:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:radiobutton path="commodityType" id="commodityType"
                                        name="commodityType" value="0" />
                                    虚拟商品&nbsp;&nbsp;&nbsp;
                                    <form:radiobutton path="commodityType" id="commodityType"
                                        name="commodityType" value="1" checked="true" />
                                    实体商品

                                </div>
                                <div class="form-group">
                                    <span id="commodityType_span" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="currencyType" class="sr-outer">货币单位:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <!-- <form:radiobutton path="currencyType" id="currencyType" name="currencyType" value="0"/>福豆&nbsp;&nbsp;&nbsp; -->
                                    <form:radiobutton path="currencyType" id="currencyType"
                                        name="currencyType" value="1" checked="true" />
                                    福饼

                                </div>
                                <div class="form-group">
                                    <span id="commodityType_span" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>


                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="pictureLink" class="sr-outer">图片链接:<span
                                        id="preview_myCustImage_span"></span></label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <input type="file" id="myCustImage" name="myCustImage"
                                        size="45" />
                                </div>
                                <div class="form-group">
                                    <input type="button" value="上传图片"
                                        onclick="ajaxFileUpload('myCustImage','pictureLink')" />
                                </div>
                                <div class="form-group">
                                    &nbsp;&nbsp;<span id="myCustImage_span"
                                        class="sr-text highlight"></span>
                                </div>
                            </div>
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:textarea dataType="image|*1-500" tipId="pictureLink_span"
                                        errormsg="请输入合法图片链接,并小于500个字符" path="pictureLink"
                                        id="pictureLink" name="pictureLink" rows="2" cols="100" />
                                </div>
                                <div class="form-group">
                                    <span id="pictureLink_span" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="totalQuantity" class="sr-outer">总人次:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:input dataType="integer" tipId="totalQuantity_span"
                                        errormsg="总人次必须为正整数" path="totalQuantity" id="totalQuantity"
                                        name="totalQuantity" class="form-control" type="text"
                                        maxlength="6" size="6" />
                                </div>
                                <div class="form-group">
                                    <span id="totalQuantity_span" class="sr-text highlight">*</span>
                                </div>
                            </div>

                        </td>
                    </tr>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="unitPrice" class="sr-outer">最低购买注数:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:radiobutton path="unitPrice" id="unitPrice"
                                        name="unitPrice" value="1" checked="true" />
                                    一元&nbsp;&nbsp;&nbsp;
                                    <form:radiobutton path="unitPrice" id="unitPrice"
                                        name="unitPrice" value="10" />
                                    十元
                                </div>
                                <div class="form-group">
                                    <span id="unitPrice_span" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>
                    <!-- 细节图 -->
                    <tr>
                        <td width="20%" rowspan="2">细节图: <!-- 
                    <div class="form-inline">
                        <div class="form-group">
                            <label for="detailImgs" class="sr-outer">细节图:&nbsp;&nbsp;<input type="button" value="全部上传" onclick="uploadDetailImgs();" /><span id="preview_detailImgs_span"></span></label>
                        </div>
                    </div>
                    -->
                        </td>
                        <td width="80%" id="newUploadTd">
                            <div class="form-inline">
                                <div class="form-group">
                                    <input type="file" onchange="fileUpload_onselect(this)"
                                        style="display: none;" id="detailImgFiles"
                                        name="detailImgFiles" /> <input type="button" value="选择图片"
                                        onclick="document.getElementById('detailImgFiles').click();" />
                                </div>
                                <div class="form-group" style="margin-left: 20px">
                                    <input type="button" id="btn_add2" value="增加一行" />
                                </div>
                                <div class="form-group">
                                    <span id="detailImgFiles_0_span" class="sr-text highlight"></span>
                                </div>
                            </div>
                        </td>
                    </tr>
                    <tr>
                        <td width="80%" id="showResultTd"><c:forEach var="tmpEntity"
                                items="${currentBanner.detailImages}" varStatus="status">
                                <div class="form-inline" id="oldImgDiv_${tmpEntity.index}">
                                    <div class="form-group">
                                        <textarea id="oldDetailImgs" name="oldDetailImgs" rows="1"
                                            cols="100">${tmpEntity.url}</textarea>
                                        <div class="form-group">
                                            <input type="button" id="btn_delOld2" value="删除"
                                                onclick="delDivRow('oldImgDiv_${tmpEntity.index}')">
                                        </div>
                                    </div>
                                </div>
                            </c:forEach>
                            <div class="form-inline" id="newImgDiv_0">
                                <div class="form-group">
                                    <textarea id="newDetailImgs" dataType="empty|image|*1-500"
                                        tipId="detail_span" errormsg="请输入合法的图片链接,并小于500个字符"
                                        name="newDetailImgs" rows="1" cols="100"></textarea>
                                </div>
                            </div></td>
                    </tr>

                    <tr>
                        <td>&nbsp;</td>
                        <td><span id="detail_span" class="sr-text highlight"></span></td>
                    </tr>

                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="tags" class="sr-outer">标签:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <c:forEach var="tmpEntity" items="${allTagList}">
                                    <div class="form-group">
                                        <label><input type="checkbox" id="selectedTags"
                                            name="selectedTags" value="${tmpEntity.tagId}">${tmpEntity.tagName}</label>
                                        <input type="hidden" name="tagName_${tmpEntity.tagId}"
                                            id="tagName_${tmpEntity.tagId}" value="${tmpEntity.tagName}" />
                                    </div>
                                </c:forEach>
                                <div class="form-group">
                                    <span id="tags_span" class="sr-text highlight">*</span>
                                </div>
                            </div>

                        </td>
                    </tr>
                    <tr>
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="tags" class="sr-outer">是否需要机器人:</label>
                                </div>
                            </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <form:radiobutton path="needRobert" id="needRobert"
                                        name="needRobert" value="1"  />
                                    是&nbsp;&nbsp;&nbsp;
                                    <form:radiobutton path="needRobert" id="needRobert"
                                        name="needRobert" value="0" checked="true" /></div>
                                <div class="form-group">
                                    <span id="unitPrice_span" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>

                    <tr style="display: none;" name="Show">
                        <td width="20%">
                            <div class="form-inline">
                                <div class="form-group">
                                    <label for="tags" class="sr-outer">计划售完时间:</label>
                                </div>
                            </div>

                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <form:input type="number"   path="planSoldTime" dataType="integer" tipId="planSoldTime_"
                                        errormsg="必须为正整数" class="planSoldTime_" min="0" max="9999" />
                                <div class="form-group">
                                    <span id="planSoldTime_" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>
                    <tr style="display: none;" name="Show">
                        <td width="20%">
                                <div class="form-inline">
                                    <div class="form-group">
                                        <label for="tags" class="sr-outer">最大购买次数:</label>
                                    </div>
                                </div>
                        </td>
                        <td width="80%">
                            <div class="form-inline">
                                <form:input type="number" dataType="integer"  tipId="regularTriggerTotalTimes_"
                                        errormsg="必须为正整数" class="regularTriggerTotalTimes_" path="regularTriggerTotalTimes"  min="1"
                                    max="10" />
                                <div class="form-group">
                                    <span id="regularTriggerTotalTimes_" class="sr-text highlight">*</span>
                                </div>
                            </div>
                        </td>
                    </tr>

                    </div>

                </tbody>
            </table>

        </div>

    </form:form>
    <div class="h10px"></div>
    <div class="form-inline">
        <div class="form-group">
            <input type="button" name="save_btn" id="save_btn"
                class="btn btn-default toTop_o_deg btn_width_1"
                onclick="createNewCommodity();" value='提交并预览' />
        </div>
    </div>


</body>
</html>

这个是html的用法不用考虑其他的就是html代码

    function validateForm1(){   
        var flag=HaHaUtil.checkFrom('detailDataForm');
        return flag;
    }

这个是from表单之前的数据校验的函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值