广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    JQurey Validation表单验证应用实例

    2018-04-06 10:41:58 次阅读 稿源:互联网
    零七广告

    是一款优秀的插件,它能对客户端表单进行验证,并且提供了许多可以定制的属性和方法,良好的扩展性。本文就是通过讲解这个实例来理解Validation的应用。

    本实例涉及到的验证有:

    用户名:长度、字符验证,重复性ajax验证(是否已存在)。

    密码:长度验证,重复输入密码验证。

    邮件:邮件地址验证。

    固定电话:中国大陆固定电话号码验证。

    手机号:中国大陆手机号码验证。

    网址:网站URL地址验证。

    日期:标准日期格式验证。

    数字:整数、正整数验证,数字范围验证。

    身份证:大陆身份证号码验证。

    邮政编码:大陆邮政编码验证。

    文件:文件类型(后缀)验证,如只允许上传图片。

    IP:IP地址验证。

    验证码:验证码ajax验证。

    使用方法:

    1、准备jquery和jquery.validate插件

    1. <script type="text/javascript" src="js/jquery.js"></script> 
    2. <script type="text/javascript" src="js/jquery.validate.js"></script> 

    2、准备CSS样式

    页面样式我不再详述,大家可以自己写个样式,也可以参看DEMO的页面源代码。这里要强调的关键样式是要显示验证信息的样式

    1. label.error{color:#ea5200margin-left:4pxpadding:0px 20px;  
    2. background:url(images/unchecked.gif) no-repeat 2px 0 } 
    3. label.right{margin-left:4pxpadding-left:20pxbackground
    4. url(images/checked.gif) no-repeat 2px 0

    3、XHTML

    1. <form id="myform" action="#" method="post"> 
    2. <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable"> 
    3.   <tr class="table_title"> 
    4.     <td colspan="2">jquery.validation 表单验证</td> 
    5.   </tr> 
    6.   <tr> 
    7.     <td width="22%" align="right">用户名:</td> 
    8.     <td><input type="text" name="user" id="user" class="input required" /> 
    9.     <p>用户名为3-16个字符,可以为数字、字母、下划线以及中文</p></td> 
    10.   </tr> 
    11.   <tr> 
    12.     <td align="right">密码:</td> 
    13.     <td><input type="password" name="pass" id="pass" class="input required" /> 
    14.     <p>最小长度:6 最大长度:16</p> 
    15.     </td> 
    16.   </tr> 
    17.   <tr> 
    18.     <td align="right">确认密码:</td> 
    19.     <td><input type="password" name="repass" class="input required" /></td> 
    20.   </tr> 
    21. </table> 
    22. </form> 

    限于篇幅,本文的只截取了实例中HTML代码的一小部分,详细XHTML代码可参看页面DEMO源代码。值得一提的是,我在给了标签一个“required”类样式,下文将会提到它的作用。

    4、应用Validation插件

    调用Validation插件的方法:

    1. $(function(){       
    2.     var validate = $("#myform").validate({ 
    3.          rules:{ //定义验证规则 
    4.             ...... 
    5.          }, 
    6.          messages:{ //定义提示信息 
    7.             ...... 
    8.          } 
    9.     }) 
    10. }); 

    rules:定义验证规则,key:value的形式,key是要验证的元素,value可以是字符串或对象。比如验证用户名的长度和不允许为空:

    1. rules:{ 
    2.   user:{ 
    3.       required:true
    4.       maxlength:16, 
    5.       minlength:3 
    6.   }, 
    7.   ...... 

    其实我们在XHTML代码中可以直接指定input的class属性为required,作用是不允许为空,这样在JS部分就不用重复写了。同样的验证email等,直接设置input的class属性为email。

    messages:定义提示信息,key:value的形式key是要验证的元素,值是字符串或函数,当验证不通过时提示的信息。

    1. messages:{ 
    2.   user:{ 
    3.       required:"用户名不能为空!"
    4.       remote:"该用户名已存在,请换个其他的用户名!" 
    5.   }, 
    6.   ...... 

    本例中涉及的验证JS就是按照上面的规则进行编写的,Validation插件封装了好多基本的验证方式,如下:

    required:true 必须有值,不能为空

    remote:url 可以用于判断用户名等是否已经存在,服务器端输出true,表示验证通过

    minlength:6 最小长度为6

    maxlength:16 最大长度为16

    rangelength:长度范围

    range:[10,20] 数值范围在10-20之间

    email:true 验证邮件

    url:true 验证URL网址

    dateISO:true 验证日期格式'yyyy-mm-dd'

    digits:true 只能为数字

    accept:'gif|jpg' 只接受gif或jpg为后缀的图片。常用于验证文件的扩展名

    equalTo:'#pass' 与哪个表单字段的值相等,常用于验证重复输入密码

    此外,我还根据项目实际情况扩展了几个验证,验证的代码在validate-ex.js,使用前需要先加载这个JS。它能提供以下验证:

    userName:true 用户名只能包括中文字、英文字母、数字和下划线

    isMobile:true 手机号码验证

    isPhone:true 大陆手机号码验证

    isZipCode:true 邮政编码验证

    isIdCardNo:true 大陆身份证号码验证

    ip:true IP地址验证

    以上提供的验证方式基本上满足我们在大多数项目中的需求。如果其他特殊验证需求,可以扩展,方法如:

    1. jQuery.validator.addMethod("isZipCode"function(value, element) {     
    2.   var zip = /^[0-9]{6}$/;     
    3.   return this.optional(element) || (zip.test(value));     
    4. }, "请正确填写您的邮政编码!");  

    疑难问题解决

    1、在项目中遇到在验证用户名是否存在时,发现不支持中文输入验证。我的解决办法是给用户名进行encodeURIComponent编码,后台PHP再对接受的值进行urldecode解码

    1. user:{ 
    2.     remote: {  
    3.          url: "chk_user.php"//服务端验证程序 
    4.          type: "post"//提交方式 
    5.          data: { user: function() {  
    6.              return encodeURIComponent($("#user").val()); //编码数据 
    7.          }}  
    8.     }  
    9. }, 

    服务端验证程序chk_user.php的代码:

    1. <?php 
    2. $request = urldecode(trim($_POST['user'])); 
    3. usleep(150000); 
    4. $users = array('daimajiayuan.com''jeymii''Peter''daimajiayuan'); 
    5. $valid = 'true'
    6. foreach($users as $user) { 
    7.     ifstrtolower($user) == $request ) 
    8.         $valid = 'false'
    9. echo $valid
    10. ?> 

    我使用的服务端程序是PHP,您也可以使用ASP,ASP.NET,JAVA等。此外本例为了演示,用户名数据是直接写在服务端的,真正的应用是从数据库里取出的用户名数据,来和接收客户端的数据进行对比。

    2、在验证checkbox和radio控件时,验证信息不会出现在最后的控件文本后面,而是直接跟在第一个控件的后面,不符合我们的要求。

    解决办法是在validate({})追加以下代码:

    1. errorPlacement: function(error, element) { 
    2.     if ( element.is(":radio") ) 
    3.         error.appendTo ( element.parent() ); 
    4.     else if ( element.is(":checkbox") ) 
    5.         error.appendTo ( element.parent() ); 
    6.     else if ( element.is("input[name=captcha]") ) 
    7.         error.appendTo ( element.parent() ); 
    8.     else 
    9.         error.insertAfter(element); 

    3、重置表单。Form表单原始的重置方法是reset自带

    1. <input type="reset" value="重 置" /> 

    点击“重置”按钮,表单元素将会重置,但是再运行Validation插件后,验证的提示信息并没重置,就是那些提示信息没有消失。感谢Validation提供了重置表单的方法:resetForm()

    1. $("input:reset").click(function(){ 
    2.     validate.resetForm(); 
    3. }); 

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告