详解jquery validate实现表单验证 (正则表达式)


Posted in Javascript onJanuary 18, 2017

一、目的

为了更好地实现人机交互,使用jQuery封装库中的validate插件,在用户填写表单时,可以快速地对用户填写的数据进行验证,并做出反馈。

二、validate插件简介  

validate()是插件的核心方法,定义了基本的校验规则和一些有用的配置项。

  • rule:设置表单的验证规则;
  • messages:设置表单不符合验证规则的提示信息;
  • debug:如果这个参数为true,那么表单还会提交,只进行检查,调试时十分方便。

required:必填

minlength:最小长度

maxlength:最大长度

rangelength:长度范围,以数组呈现[2,10],表示表单输入长度为2到10位

remote:可以通过发现GET或者POST请求进行远程验证,与Ajax的验证进行比较。就是通过ajax实现的

    url:
    type:默认为GET请求
    data:发送的数据

发送GET请求例子:

check:{
          required:true,
          remote:{
            url:"__CONTROLLER__/check?check="+$("#icode").val
            //__CONTROLLER__表示当前控制器
          }
        }

基本的校验规则

序号 规则 描述
1 required:true 必须输入的字段。
2 remote:"check.php" 使用 ajax 方法调用 check.php 验证输入值。
3 email:true 必须输入正确格式的电子邮件。
4 url:true 必须输入正确格式的网址。
5 date:true 必须输入正确格式的日期。日期校验 ie6 出错,慎用。
6 dateISO:true 必须输入正确格式的日期(ISO),例如:2009-06-23,1998/01/22。只验证格式,不验证有效性。
7 number:true 必须输入合法的数字(负数,小数)。
8 digits:true 必须输入整数。
9 creditcard: 必须输入合法的信用卡号。
10 equalTo:"#field" 输入值必须和 #field 相同。
11 accept: 输入拥有合法后缀名的字符串(上传文件的后缀)。
12 maxlength:5 输入长度最多是 5 的字符串(汉字算一个字符)。
13 minlength:10 输入长度最小是 10 的字符串(汉字算一个字符)。
14 rangelength:[5,10] 输入长度必须介于 5 和 10 之间的字符串(汉字算一个字符)。
15 range:[5,10] 输入值必须介于 5 和 10 之间。
16 max:5 输入值不能大于 5。
17 min:10 输入值不能小于 10。

validator对象

  • validator.form()验证表单是否有效,返回true或者false;
  • validator.element(element)验证表单中某个元素是否有效,返回true或者false;
  • validator.resetForm()把表单恢复到验证前原来的状态;
  • validator.showErrors(error)针对元素显示特定的错误信息;
  • validator.numberOfInvalids()返回无效的元素数量;

validator对象的静态方法

  • jQuery.validator.addMethod()增加自定义的验证方法;  (即$.validator.addMethod())
  • jQuery.validator.format()格式化字符串,用参数代替模板中的{n};
  • jQuery.validator.setDefaults()修改插件默认设计;
  • jQuery.validator.addClassRules()为某些包含名为name的class增加组合验证类型。
$.validator.addClassRules({
  txt:{
    required:true,
    rangelength:[2,10]
  }
})//这时class="txt"的类都具备了这个两个验证规则

获取表单元素的验证规则:

$("#username").rules();

为表单元素添加验证规则: 

$("#username").rules('add',rules);

为表单元素删除验证规则:

$("#username").rules('remove',rules);

三、正则表达式

常用正则表达式:

用户名的正则表达式验证:/^[\w\u4e00-\u9fa5]{2,10}/g(含汉字)

用户名验证:/^\w{2,10}$/(不含汉字,只允许英文字母、数字和下画线,长度为2-10位)

QQ号验证:/^[1,9][0,9]{4,19}$/(第一位数字不为0,5-19位数字)

邮箱验证:/^[a-z0-9]+@([a-z0-9]+\.)+[a-z]{2,4}$/i(不区分大小写)

密码验证:/^\w{6,16}$/(只允许6-16位英文字母、数字和下画线)

手机号验证:/^1[3,5,7,8]\d{9}$/

URL验证:/^http:\/\/[a-z\d-]+(\w\/)+)$/i

$(document).ready(function(){ 
  $("#table").validate({ 
    rules:{ 
      admin_name:{ 
        required:true, 
        checkName:true, 
      }, 
      name:{ 
        required:true,          
      }, 
      admin_pwd:{ 
        required:true, 
        checkPwd:true, 
      }, 
      con_pwd:{ 
        required:true, 
        equalTo:admin_pwd, 
      }, 
      email:{ 
        required:true, 
        checkEmail:true, 
      }, 
      qq:{ 
        required:true, 
        checkQQ:true, 
      }, 
      s_page:{ 
        url:true, 
         
      }, 
      check:{ 
        //required:true, 
        //remote:{ 
          //url:"__CONTROLLER__/check?check="+$("#icode").val, 
          //__CONTROLLER__表示当前控制器 
          //dataType:"json", 
        //} 
      } 
    }, 
    messages:{ 
      admin_name:{ 
        required:"*必填!", 
        rangelength:"*长度为2到10位!", 
      }, 
      name:{ 
        required:"*必填!", 
      }, 
      admin_pwd:{ 
        required:"*必填!", 
        rangelength:"*长度为6到16位!", 
      }, 
      con_pwd:{ 
        required:"*必填!", 
        equalTo:"*两次输入的密码不一致!" 
      }, 
      email:{ 
        required:"*必填!", 
        email:"*请输入正确的邮箱!", 
      }, 
      qq:{ 
        required:"*必填!", 
      }, 
      s_page:{ 
        url:"*请输入正确的网页地址!", 
      }, 
      check:{ 
        required:"*必填!", 
        remote:"*验证码有误!", 
      }, 
    }, 
    //是否在获取焦点时验证 
    //onfocusout:false, 
    //是否在敲击键盘时验证 
    //onkeyup:false, 
    //提交表单后,(第一个)未通过验证的表单获得焦点 
    focusInvalid:true, 
    //当未通过验证的元素获得焦点时,移除错误提示 
    focusCleanup:true, 
  }); 
   
  //自定义正则表达示验证方法 
  $.validator.addMethod("checkQQ",function(value,element,params){ 
      var checkQQ = /^[1-9][0-9]{4,19}$/; 
      return this.optional(element)||(checkQQ.test(value)); 
    },"*请输入正确的QQ号码!"); 
     
  $.validator.addMethod("checkEmail",function(value,element,params){ 
      var checkEmail = /^[a-z0-9]+@([a-z0-9]+\.)+[a-z]{2,4}$/i; 
      return this.optional(element)||(checkEmail.test(value)); 
    },"*请输入正确的邮箱!"); 
     
  $.validator.addMethod("checkName",function(value,element,params){ 
      var checkName = /^\w{2,10}$/g; 
      return this.optional(element)||(checkName.test(value)); 
    },"*只允许2-10位英文字母、数字或者下画线!"); 
   
  $.validator.addMethod("checkPwd",function(value,element,params){ 
      var checkPwd = /^\w{6,16}$/g; 
      return this.optional(element)||(checkPwd.test(value)); 
    },"*只允许6-16位英文字母、数字或者下画线!"); 
});

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 回车提交表单两种实现方法
Dec 31 Javascript
解决JS浮点数运算出现Bug的方法
Mar 12 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
Bootstrap3制作图片轮播效果
May 12 Javascript
js实现四舍五入完全保留两位小数的方法
Aug 02 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
JavaScript中的return布尔值的用法和原理解析
Aug 14 Javascript
微信小程序实现表单校验功能
Mar 30 Javascript
vue 点击按钮增加一行的方法
Sep 07 Javascript
详解ES6 CLASS在微信小程序中的应用实例
Apr 24 Javascript
JS实现躲避粒子小游戏
Jun 18 Javascript
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
原生js实现中奖信息无间隙滚动效果
Jan 18 #Javascript
js实现简单的网页换肤效果
Jan 18 #Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
Jan 18 #Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 #Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 #Javascript
js实现消息滚动效果
Jan 18 #Javascript
利用Vue.js实现checkbox的全选反选效果
Jan 18 #Javascript
You might like
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
2019/03/02 NodeJs
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
Python制作词云的方法
2018/01/03 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
Numpy中的mask的使用
2018/07/21 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
波兰在线运动商店:YesSport
2020/07/23 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
学校七一活动方案
2014/01/19 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
导游词之河北邯郸
2019/09/12 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
阿里云日志过滤器配置日志服务
2022/04/09 Servers
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle