热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> AJAX编程>>正文内容

Web前端设计模式--jQuery验证插件【附源码下载】

发布时间:2010年10月29日点击数: 佚名

 设计目标:建立一个基于jQuery框架的通用Web验证插件...【源码下载

 设计要求:1.需要漂亮的css样式及小图标的润饰...
                   2.基于jQuery框架...
                   3.调用.net Web 服务来实现与数据库的异步交互...

 解决方案:1、首先,我们来设计三个类,分别用来显示Web给用户的视觉感知。它们分别是

  1. .msg_warning{font-family:Arial,Helvetica,sans-serif,simsun; background:#e7f7ff url(register/MsgWarning.gif) no-repeat;border:solid 1px #6cf;color:#333;padding:0 0 0 36px !important;width:220pxmargin-left:20px;} 
  2.                         .msg_error{font-family:Arial,Helvetica,sans-serif,simsun;background:#fff3ef url(register/MsgError.jpg) no-repeat;border:solid 1px #ff6610;color:#333;padding:0 0 0 36px !important;width:220px;  margin-left:20px;} 
  3.  
  4.                         .msg_ok{font-family:Arial,Helvetica,sans-serif,simsun;background:#e7ffe7 url(register/MsgOk.gif) no-repeat;border:solid 1px #95e895;color:#333;padding:0 0 0 36px !important;width:220px;  margin-left:20px;} 

     分别是验证错误,验证警告和验证正确时候的不同样式..

2. 在相应的位置放置图片,如样式中的所示,包含MsgWarning.gif,MsgError.jpg,MsgOk.gif三张小图片分别对应.msg_warning;.msg_error;.msg_ok;

3.开始编写脚本

(1)、//去掉空值

  1. String.prototype.trim = function() 
  2.     var x = this
  3.     x = x.replace(/^\s*(.*)/, "$1"); 
  4.     return x; 

这个函数用以去掉文本框中的空位置(trim)...

(2)、写两个数组,用以存放触发验证时的提示语句和样式...
var ErrorWords = ['正确!', '不能为空!', 'E-mail地址长度不能超过50位!', '请输入正确的邮箱格式!',"密码必须大于6个,少于16个!","密钥不配对!",'公司名称不能超过50位!',"区号和号码均不为空!","区号为4位数字!","号码为7-10位的数字!","QQ号码为5-12位数字!",'地址长度不超过50位!','名字为10位以内的中文!','手机号为11位数字!','邮编为6位数字!','用户名为3-15位之间!','域名格式错误!','该用户名已注册!','该邮箱已被注册!']
 

  1. var ErrorClass = ['msg_ok''msg_warning''msg_warning''msg_error''msg_warning''msg_error''msg_warning''msg_warning''msg_error','msg_error','msg_error','msg_error','msg_error','msg_error','msg_error','msg_error','msg_error','msg_error','msg_error'
  2.   

(3)、开始编写各种验证类型,我写了所有我能够想到的...

  1. ;(function($){      
  2.      //闭包邮箱核对    
  3.      jQuery.fn.extend({                        
  4.           "checkEmail":function()  //封装成checkEmail()函数 
  5.            { 
  6.               $(this).blur(function(){  
  7.                var check;                 
  8.                var email=$(this).val().toLowerCase(); 
  9.                var strSuffix = "cc|com|edu|gov|int|net|org|biz|info|pro|name|coop|al|dz|af|ar|ae|aw|om|az|eg|et|ie|ee|ad|ao|ai|ag|at|au|mo|bb|pg|bs|pk|py|ps|bh|pa|br|by|bm|bg|mp|bj|be|is|pr|ba|pl|bo|bz|bw|bt|bf|bi|bv|kp|gq|dk|de|tl|tp|tg|dm|do|ru|ec|er|fr|fo|pf|gf|tf|va|ph|fj|fi|cv|fk|gm|cg|cd|co|cr|gg|gd|gl|ge|cu|gp|gu|gy|kz|ht|kr|nl|an|hm|hn|ki|dj|kg|gn|gw|ca|gh|ga|kh|cz|zw|cm|qa|ky|km|ci|kw|cc|hr|ke|ck|lv|ls|la|lb|lt|lr|ly|li|re|lu|rw|ro|mg|im|mv|mt|mw|my|ml|mk|mh|mq|yt|mu|mr|us|um|as|vi|mn|ms|bd|pe|fm|mm|md|ma|mc|mz|mx|nr|np|ni|ne|ng|nu|no|nf|na|za|aq|gs|eu|pw|pn|pt|jp|se|ch|sv|ws|yu|sl|sn|cy|sc|sa|cx|st|sh|kn|lc|sm|pm|vc|lk|sk|si|sj|sz|sd|sr|sb|so|tj|tw|th|tz|to|tc|tt|tn|tv|tr|tm|tk|wf|vu|gt|ve|bn|ug|ua|uy|uz|es|eh|gr|hk|sg|nc|nz|hu|sy|jm|am|ac|ye|iq|ir|il|it|in|id|uk|vg|io|jo|vn|zm|je|td|gi|cl|cf|cn"
  10.                var regu = "^[a-z0-9][_a-z0-9\-]*([\.][_a-z0-9\-]+)*@([a-z0-9\-_]+[\.])+(" + strSuffix + ")$"
  11.                var re = new RegExp(regu);  
  12.                if(email.trim()=='') check=1; 
  13.                else if(email.length > 50) check=2; 
  14.                else if(email.search(re) == -1) check=3; 
  15.                else { check=0;}   
  16.                $(this).next().remove("span"); 
  17.                $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  18.                })               
  19.             }             
  20.         }) 
  21. =========================================================== 
  22.      //闭包密码验证s    
  23.      jQuery.fn.extend({                        
  24.           "checkCode":function() 
  25.            { 
  26.               $(this).blur(function(){                 
  27.                var check;                 
  28.                var pwd=$(this).val(); 
  29.                var path = /^[a-zA-Z0-9_]{6,16}$/; 
  30.                if(pwd.trim()=='') check=1; 
  31.                else if(!path.test(pwd)) check=4; 
  32.                else check=0;                       
  33.                 
  34.                $(this).next().remove("span"); 
  35.                $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  36.                })  
  37.             }             
  38.         })         
  39.          
  40.      //闭包密码重复核对    
  41.      jQuery.fn.extend({                        
  42.           "checkCode2":function(pwd) 
  43.            { 
  44.               $(this).blur(function(){ 
  45.                 
  46.                var check;                 
  47.                var pwd2=$(this).val(); 
  48.                if(pwd2.trim()=='') check=1; 
  49.                else if(pwd2!=$(pwd).val()) check=5; 
  50.                else check=0; 
  51.                $(this).next().remove("span"); 
  52.                $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  53.                })  
  54.             }             
  55.         }) 
  56. =========================================================================== 
  57.      //闭包公司名称核对   
  58.      jQuery.fn.extend({                        
  59.           "checkCPName":function() 
  60.            { 
  61.               $(this).blur(function(){ 
  62.                               
  63.                var check;                 
  64.                var CPName=$(this).val(); 
  65.                if(CPName.trim()=='') check=1; 
  66.                else if(CPName.length>50) check=6; 
  67.                else check=0; 
  68.                $(this).next().remove("span"); 
  69.                $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  70.                })  
  71.             }             
  72.         }) 
  73.   
  74. ========================================================================== 
  75.   
  76.      //闭包公司电话/传真核对   
  77.      jQuery.fn.extend({                        
  78.           "checkTel":function() 
  79.            { 
  80.               $(this).blur(function(){         
  81.                var check;        
  82.                var names=$(this).attr("name");                
  83.                var check1=$("input[name='"+names+"']").eq(0).val(); 
  84.                var check2=$("input[name='"+names+"']").eq(1).val(); 
  85.                var path1 = /^[0-9]{4}$/; 
  86.                var path2= /^[0-9]{7,10}$/; 
  87.                if(check1.trim() == ''|| check2.trim()=='') check=7; 
  88.                else if(!path1.test(check1)) check=8; 
  89.                else if(!path2.test(check2)) check=9;  
  90.                else check=0; 
  91.                $("input[name='"+names+"']").eq(1).next().remove("span"); 
  92.                $("input[name='"+names+"']").eq(1).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  93.                })  
  94.             }             
  95.         }) 
  96. ======================================================================================= 
  97.     //闭包QQ/MSN核对  
  98.      jQuery.fn.extend({                        
  99.           "checkQQ":function() 
  100.            { 
  101.               $(this).blur(function(){                 
  102.                var check; 
  103.                var CPQQ=$(this).val(); 
  104.                var path= /^[0-9]{5,12}$/; 
  105.               if(CPQQ.trim()=='') check=1; 
  106.               else if(!path.test(CPQQ)) check=10; 
  107.               else check=0; 
  108.               $(this).next().remove("span");                
  109.               $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  110.                
  111.               })  
  112.             }             
  113.         }) 
  114. ======================================================================================= 
  115.      //闭包地址核对 
  116.      jQuery.fn.extend({                        
  117.           "checkAdd":function() 
  118.            { 
  119.               $(this).blur(function(){                 
  120.                var check; 
  121.                var CPAdd=$(this).val(); 
  122.                if(CPAdd.trim()=='') check=1; 
  123.                else if(CPAdd.length>50) check=11; 
  124.                else check=0; 
  125.                 
  126.               $(this).next().remove("span");                
  127.               $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  128.                
  129.               })  
  130.             }             
  131.         }) 
  132. ========================================================================================= 
  133.         //闭包用户真实姓名核对     利用函数返回程序结果 
  134.         jQuery.fn.extend({ 
  135.              "checkRealName":function() 
  136.              { 
  137.                  var check; 
  138.                 $(this).blur(function(){ 
  139.                     
  140.                    var realName=$(this).val(); 
  141.                    var reg = /^[\u4e00-\u9fa5]{1,10}$/gi;                    
  142.                    if(realName.trim()=='') check=1; 
  143.                    else if(!reg.test(realName)) check=12; 
  144.                    else check=0; 
  145.                     
  146.                    $(this).next().remove("span");                
  147.                    $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");     
  148.                      return check;                      
  149.                 })                 
  150.              }              
  151.         }) 
  152. ================================================================================= 
  153.        //闭包手机号码核对 
  154.        jQuery.fn.extend({ 
  155.           "checkPhone":function() 
  156.           { 
  157.              $(this).blur(function(){ 
  158.                 var check; 
  159.                 var telephone=$(this).val(); 
  160.                 var reg=/^[0-9]{11}$/; 
  161.                 if(telephone.trim()=='') check=1; 
  162.                 else if(!reg.test(telephone)) check=13; 
  163.                 else check=0; 
  164.                  
  165.                 $(this).next().remove("span");                
  166.                 $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");  
  167.              }) 
  168.           }        
  169.        }) 
  170. =========================================================================================== 
  171.       //闭包邮编核对 
  172.       jQuery.fn.extend({ 
  173.          "checkPCode":function() 
  174.          { 
  175.             $(this).blur(function(){ 
  176.                var check; 
  177.                var PCode=$(this).val(); 
  178.                var reg=/^[0-9]{6}$/; 
  179.                if(PCode=='') check=1; 
  180.                else if(!reg.test(PCode)) check=14; 
  181.                else check=0; 
  182.                 
  183.                 $(this).next().remove("span");                
  184.                 $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");                  
  185.             })              
  186.          } 
  187.       }) 
  188. ========================================================================================== 
  189.   
  190.         //闭包用户名核对 
  191.       jQuery.fn.extend({ 
  192.           "checkUserName":function() 
  193.           { 
  194.              $(this).blur(function(){ 
  195.                 var check; 
  196.                 var UserName=$(this).val(); 
  197.                 if(UserName=='') check=1; 
  198.                 else if(UserName.length<3 || UserName.length>15) check=15; 
  199.                 else check=0; 
  200.                  
  201.                 $(this).next().remove("span");                
  202.                 $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");   
  203.              })              
  204.           }          
  205.       }) 
  206.   
  207. ================================================================================ 
  208.   
  209.       //闭包域名验证 
  210.       jQuery.fn.extend({ 
  211.          "checkSite":function() 
  212.          {                       
  213.               $(this).blur(function(){                     
  214.                     var check; 
  215.                     var WebSite=$(this).val(); 
  216.                     var reg= /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/; 
  217.                     if(WebSite=='') check=1; 
  218.                     else if(!reg.test(WebSite)) check=16; 
  219.                     else check=0; 
  220.                      
  221.                 $(this).next().remove("span"); 
  222.                 $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");                 
  223.             })          
  224.          } 
  225.       })  
  226.   
  227. =================================================================================== 
  228.     //验证用户名是否存在数据库中(调用WebService方法) 
  229.     jQuery.fn.extend({ 
  230.         "nameAjax":function(LName,Lfun) 
  231.         { 
  232.            $(this).blur(function(){ 
  233.               var check; 
  234.               var thisid=$(this).attr("id"); 
  235.               var logname=$(this).val(); 
  236.               if(logname=='')  
  237.               { 
  238.                    check=1; 
  239.                    $("#"+thisid).next().remove("span"); 
  240.                    $("#"+thisid).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  241.               } 
  242.                
  243.               else if(logname.length<3||logname.length>15) 
  244.                      {                       
  245.                        check=15; 
  246.                        $(this).next().remove("span"); 
  247.                        $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); 
  248.                      } 
  249.               else  
  250.               { 
  251.              $.ajax({ 
  252.                 type: "POST"
  253.                 contentType:"application/json;utf-8"
  254.                 url: "./WebService.asmx/"+LName, 
  255.                 data:"{"+Lfun+":'"+logname+"'}"
  256.                 dataType: 'json'
  257.                 anysc:false
  258.                 success:function(data) 
  259.                 {   if(data.d) check=17;                     
  260.                     else check=0; 
  261.                                          
  262.                     $("#"+thisid).next().remove("span"); 
  263.                     $("#"+thisid).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");    
  264.                 } 
  265.               })               
  266.             }                       
  267.            }) 
  268.         } 
  269.     }) 

相对应的Web服务方法:

  1. /// <summary> 
  2.    ///这边核对登陆名是否存在,这边偷懒用随机验证  
  3.    /// </summary> 
  4.    /// <param name="logName"></param> 
  5.    /// <returns></returns> 
  6.    [WebMethod] 
  7.    public bool checkLogoName(string lognames) 
  8.    { 
  9.        Random r = new Random(); 
  10.        int i = r.Next(1, 10000); 
  11.        if (i % 2 == 0) return true
  12.        return false
  13.    } 
  14. ======================================================================================== 
  15.      //验证用户邮箱是否在数据库中(调用Web服务的方法) 
  16.     jQuery.fn.extend({     
  17.         "emailAjax":function(Lemail,Lfun) 
  18.         { 
  19.           $(this).blur(function(){ 
  20.                 var check; 
  21.                 var thisid=$(this).attr("id");               
  22.                 
  23.              var email=$(this).val().toLowerCase(); 
  24.               var strSuffix = "cc|com|edu|gov|int|net|org|biz|info|pro|name|coop|al|dz|af|ar|ae|aw|om|az|eg|et|ie|ee|ad|ao|ai|ag|at|au|mo|bb|pg|bs|pk|py|ps|bh|pa|br|by|bm|bg|mp|bj|be|is|pr|ba|pl|bo|bz|bw|bt|bf|bi|bv|kp|gq|dk|de|tl|tp|tg|dm|do|ru|ec|er|fr|fo|pf|gf|tf|va|ph|fj|fi|cv|fk|gm|cg|cd|co|cr|gg|gd|gl|ge|cu|gp|gu|gy|kz|ht|kr|nl|an|hm|hn|ki|dj|kg|gn|gw|ca|gh|ga|kh|cz|zw|cm|qa|ky|km|ci|kw|cc|hr|ke|ck|lv|ls|la|lb|lt|lr|ly|li|re|lu|rw|ro|mg|im|mv|mt|mw|my|ml|mk|mh|mq|yt|mu|mr|us|um|as|vi|mn|ms|bd|pe|fm|mm|md|ma|mc|mz|mx|nr|np|ni|ne|ng|nu|no|nf|na|za|aq|gs|eu|pw|pn|pt|jp|se|ch|sv|ws|yu|sl|sn|cy|sc|sa|cx|st|sh|kn|lc|sm|pm|vc|lk|sk|si|sj|sz|sd|sr|sb|so|tj|tw|th|tz|to|tc|tt|tn|tv|tr|tm|tk|wf|vu|gt|ve|bn|ug|ua|uy|uz|es|eh|gr|hk|sg|nc|nz|hu|sy|jm|am|ac|ye|iq|ir|il|it|in|id|uk|vg|io|jo|vn|zm|je|td|gi|cl|cf|cn"
  25.               var regu = "^[a-z0-9][_a-z0-9\-]*([\.][_a-z0-9\-]+)*@([a-z0-9\-_]+[\.])+(" + strSuffix + ")$"
  26.               var re = new RegExp(regu); 
  27.               if(email.trim()=='') { check=1;$(this).next().remove("span"); $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); } 
  28.               else if(email.length > 50) { check=2; $(this).next().remove("span"); $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); } 
  29.               else if(email.search(re) == -1) { check=3; $(this).next().remove("span"); $(this).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>"); } 
  30.               else  
  31.               { 
  32.                
  33.                $.ajax({ 
  34.                type: "POST"
  35.                contentType:"application/json;utf-8"
  36.                url: "./WebService.asmx/"+Lemail, 
  37.                data:"{"+Lfun+":'"+email+"'}"
  38.                dataType: 'json'
  39.                anysc:false
  40.                success:function(data) 
  41.                {   if(data.d) check=18;                     
  42.                    else check=0; 
  43.                                         
  44.                    $("#"+thisid).next().remove("span"); 
  45.                    $("#"+thisid).after("<span class='"+ErrorClass[check]+"'>"+ErrorWords[check]+"</span>");    
  46.                } 
  47.              }) 
  48.               }          
  49.           }) 
  50.         }         
  51.     }) 

相对应的Web服务方法:

  1. /// <summary> 
  2.     /// 核对邮箱是否存在,这边偷懒用随机验证  
  3.     /// </summary> 
  4.     /// <param name="logemail"></param> 
  5.     /// <returns></returns> 
  6.     [WebMethod] 
  7.     public bool checkLogEmail(string logemails) 
  8.     {  
  9.         Random r = new Random(); 
  10.         int i = r.Next(1, 10000); 
  11.         if (i % 2 == 0) return true
  12.         return false
  13.     } 
  14.   
  15. =====================================================================================  
  16.     //最终提交 
  17.      jQuery.fn.extend({            
  18.            "toReg":function(num) //这里的nun请注意,启用多少个验证就写多少数字,因为我将上面的15个验证都启用... 
  19.            { 
  20.               $(this).click(function(){               
  21.                   var erolen=$(".msg_error").length; 
  22.                   var warlen=$(".msg_warning").length; 
  23.                   var oklen=$(".msg_ok").length;  
  24.        if(oklen==num) 
  25.            {  alert("验证通过..."); }          
  26.          else alert("错误:"+erolen+",警告:"+warlen+",通过:"+oklen+",请完整填写信息!");                    
  27.               })   
  28.            }         
  29.      })                    
  30.  })(jQuery); 
  31. ============================================================================================= 

4、在Web页面引入脚本

  1. <script src="jQueryValidation/js/jquery-1.4.2.min.js" type="text/javascript"></script> 
  2.  <script src="jQueryValidation/js/wzh.Register.js" type="text/javascript"></script>    
  3.   
  4.      <script type="text/javascript"
  5.        $(document).ready(function(){ 
  6.         
  7.                  $("#Emails").checkEmail();//验证Email 
  8.                  $("#Codes").checkCode();//验证密码框一 
  9.                  $("#Codes2").checkCode2("#Codes");//验证密码框二,参数为第一个密码框的ID 
  10.                  $("#CPNames").checkCPName();//验证公司名称 
  11.                  $("input[name='tel']").checkTel();//验证电话(格式:区号框和号码框需在同一个name下面,如tel) 
  12.                  $("input[name='fax']").checkTel();//验证传真(格式:区号框和号码框需在同一个name下面,如tel) 
  13.                  $("#QQs").checkQQ();//验证QQ号码 
  14.                  $("#CPAdds").checkAdd();//验证公司地址 
  15.                  $("#RealName").checkRealName();//验证真实姓名,10位以内的中文 
  16.                  $("#Phones").checkPhone();//验证移动电话号码,11位 
  17.                  $("#PCodes").checkPCode();//验证邮编 ,6位 
  18.                  $("#UserName").checkUserName();//验证用户名 
  19.                  $("#WebSites").checkSite();//验证网址 
  20.                  $("#usernameAjax").nameAjax("checkLogoName","lognames");//Web服务中的函数名,参数名;方法在WebService中 
  21.                  $("#uemailAjax").emailAjax("checkLogEmail","logemails");//Web服务中的函数名,参数名;方法在WebService中 
  22.                   
  23.                  $("#register").toReg(15);//用户注册 
  24.        }) 
  25.    </script>   

5.Web页面的HTML源码

  1. <div> 
  2.      
  3.        用户登录名核对:<input type="text" id="UserName" /><br /><br /> 
  4.     邮箱核对:<input type="text" id="Emails"/><br /><br /> 
  5.     密码核对:<input type="password" id="Codes"/><br /><br /> 
  6.     密码再对:<input type="password" id="Codes2"/><br /><br /> 
  7.     公司名称核对:<input type="text" id="CPNames"/><br /><br /> 
  8.     电话:区号:<input name="tel" type="text" id="txtTel1" size="8"/> 
  9.                 -  
  10.                <input name="tel" type="text" id="txtTel2"  size="16"/>  
  11.                <br /><br /> 
  12.     传真:区号:<input name="fax" type="text" id="txtFax1" size="8" /> 
  13.                 -  
  14.                <input name="fax" type="text" id="txtFax2"  size="16"  /> <br /><br /> 
  15.     用户QQ:<input type="text" id="QQs"/><br /><br /> 
  16.     公司地址:<input type="text" id="CPAdds"/><br /><br /> 
  17.     用户真实姓名:<input type="text" id="RealName"/><br /><br /> 
  18.     手机号码核对:<input type="text" id="Phones"/><br /><br /> 
  19.     邮编核对:<input type="text" id="PCodes"/><br /><br /> 
  20.     域名验证:<input type="text" id="WebSites" value="htp://"/><br /><br />  
  21.     (数据库)用户名验证:<input type="text" id="usernameAjax"/><br /><br />   
  22.     (数据库)用户邮箱验证:<input type="text" id="uemailAjax"/><br /><br /> 
  23.        <input type="button" value="提交" id="register"/> 
  24.      
  25.     </div> 
  26. //至此全部结束 

设计小结:还有很不不完善的地方,譬如未想到的验证,还有代码冗余度过大,希望使用的时候可以自己改良下...

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作