1. /*
  2.  
  3. 描述:基于jquery的表单验证插件。
  4.  
  5. */
  6.  
  7. (function ($) {
  8.  
  9. $.fn.checkForm = function (options) {
  10.  
  11. var root = this; //将当前应用对象存入root
  12.  
  13. var isok = false; //控制表单提交的开关
  14.  
  15. var pwd1; //密码存储
  16.  
  17. var defaults = {
  18.  
  19. //图片路径
  20.  
  21. img_error: "img/error.gif",
  22.  
  23. img_success: "img/success.gif",
  24.  
  25. //提示信息
  26.  
  27. tips_success: '', //验证成功时的提示信息,默认为空
  28.  
  29. tips_required: '不能为空',
  30.  
  31. tips_email: '邮箱地址格式有误',
  32.  
  33. tips_num: '请填写数字',
  34.  
  35. tips_chinese: '请填写中文',
  36.  
  37. tips_mobile: '手机号码格式有误',
  38.  
  39. tips_idcard: '身份证号码格式有误',
  40.  
  41. tips_pwdequal: '两次密码不一致',
  42.  
  43. //正则
  44.  
  45. reg_email: /^\w+\@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/i, //验证邮箱
  46.  
  47. reg_num: /^\d+$/, //验证数字
  48.  
  49. reg_chinese: /^[\u4E00-\u9FA5]+$/, //验证中文
  50.  
  51. reg_mobile: /^1[3458]{1}[0-9]{9}$/, //验证手机
  52.  
  53. reg_idcard: /^\d{14}\d{3}?\w$/ //验证身份证
  54.  
  55. };
  56.  
  57. //不为空则合并参数
  58.  
  59. if(options)
  60.  
  61. $.extend(defaults, options);
  62.  
  63. //获取(文本框,密码框,多行文本框),当失去焦点时,对其进行数据验证
  64.  
  65. $(":text,:password,textarea", root).each(function () {
  66.  
  67. $(this).blur(function () {
  68.  
  69. var _validate = $(this).attr("check"); //获取check属性的值
  70.  
  71. if (_validate) {
  72.  
  73. var arr = _validate.split(' '); //用空格将其拆分成数组
  74.  
  75. for (var i = 0; i < arr.length; i++) {
  76.  
  77. //逐个进行验证,不通过跳出返回false,通过则继续
  78.  
  79. if (!check($(this), arr[i], $(this).val()))
  80.  
  81. return false;
  82.  
  83. else
  84.  
  85. continue;
  86.  
  87. }
  88.  
  89. }
  90.  
  91. })
  92.  
  93. })
  94.  
  95. //表单提交时执行验证,与上面的方法基本相同,只不过是在表单提交时触发
  96.  
  97. function _onSubmit() {
  98.  
  99. isok = true;
  100.  
  101. $(":text,:password,textarea", root).each(function () {
  102.  
  103. var _validate = $(this).attr("check");
  104.  
  105. if (_validate) {
  106.  
  107. var arr = _validate.split(' ');
  108.  
  109. for (var i = 0; i < arr.length; i++) {
  110.  
  111. if (!check($(this), arr[i], $(this).val())) {
  112.  
  113. isok = false; //验证不通过阻止表单提交,开关false
  114.  
  115. return; //跳出
  116.  
  117. }
  118.  
  119. }
  120.  
  121. }
  122.  
  123. });
  124.  
  125. }
  126.  
  127. //判断当前对象是否为表单,如果是表单,则提交时要进行验证
  128.  
  129. if (root.is("form")) {
  130.  
  131. root.submit(function () {
  132.  
  133. _onSubmit();
  134.  
  135. return isok;
  136.  
  137. })
  138.  
  139. }
  140.  
  141. //验证方法
  142.  
  143. var check = function (obj, _match, _val) {
  144.  
  145.  //根据验证情况,显示相应提示信息,返回相应的值
  146.  
  147. switch (_match) {
  148.  
  149. case 'required':
  150.  
  151. return _val ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_required, false);
  152.  
  153. case 'email':
  154.  
  155. return chk(_val, defaults.reg_email) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_email, false);
  156.  
  157. case 'num':
  158.  
  159. return chk(_val, defaults.reg_num) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_num, false);
  160.  
  161. case 'chinese':
  162.  
  163. return chk(_val, defaults.reg_chinese) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_chinese, false);
  164.  
  165. case 'mobile':
  166.  
  167. return chk(_val, defaults.reg_mobile) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_mobile, false);
  168.  
  169. case 'idcard':
  170.  
  171. return chk(_val, defaults.reg_idcard) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_idcard, false);
  172.  
  173. case 'pwd1':
  174.  
  175. pwd1 = _val; //实时获取存储pwd1值
  176.  
  177. return true;
  178.  
  179. case 'pwd2':
  180.  
  181. return pwdEqual(_val, pwd1) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_pwdequal, false);
  182.  
  183. default:
  184.  
  185. return true;
  186.  
  187. }
  188.  
  189. }
  190.  
  191. //判断两次密码是否一致(返回bool值)
  192.  
  193. var pwdEqual = function(val1, val2) {
  194.  
  195. return val1 == val2 ? true : false;
  196.  
  197. }
  198.  
  199. //正则匹配(返回bool值)
  200.  
  201. var chk = function (str, reg) {
  202.  
  203. return reg.test(str);
  204.  
  205. }
  206.  
  207. //显示信息
  208.  
  209. var showMsg = function (obj, msg, mark) {
  210.  
  211. $(obj).next("#errormsg").remove();//先清除
  212.  
  213. var _html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_error + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";
  214.  
  215. if (mark)
  216.  
  217. _html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_success + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";
  218.  
  219. $(obj).after(_html);//再添加
  220.  
  221. return mark;
  222.  
  223. }
  224.  
  225. }
  226.  
  227. })(jQuery);
  228.  
  229. 先来说一说实现原理:
  230.  
  231. 首先定义好正则,和相应的提示信息,
  232.  
  233. 加上自定义check属性,
  234.  
  235. 然后获取check属性的值,多个值用空格分开。利用split()将其拆分为数组,在逐个调用check()方法进行验证。
  236.  
  237. 之后通过验证的返回值来确定显示的信息。
  238.  
  239. 这里有两个验证是比较特别的,就是:
  240.  
  241. 1.验证是否为空 required
  242.  
  243. 2.两次密码是否一致 pwd2
  244.  
  245. 这两个都没有用到正则,因为根本就用不上。 两次密码是否一致 ,单独写了个方法 pwdEqual();
  246.  
  247. 插件里的验证正则我只写了几个 ,如果不够用可以自行扩展添加。
  248.  
  249. 扩展只需3步:
  250.  
  251. 1.添加正则,
  252.  
  253. 2.添加相应提示信息,
  254.  
  255. 3.check()方法中添加相应 case 处理
  256.  
  257. jquery实现表单验证简单实例演示
  258.  
  259. 插件使用说明:
  260.  
  261. 1.给表单下要进行验证的文本框,密码框 ,多行文本框加上自定义check属性
  262.  
  263. 2.多个格式验证用空格间隔,如(同时验证必填和邮箱): check="required email"
  264.  
  265. 3.如果要验证两次密码是否一致,则pwd1pwd2一起使用,如下图:
  266.  
  267. pwd1存储第一次输入的值,pwd2存储第二次输入的值,如果你只用pwd1还好,但如果只用了pwd2,则验证是始终无法通过的。
  268.  
  269. 下面给出DEMO示例代码:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4.  
  5. <head>
  6.  
  7. <title>表单验证插件</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12.  
  13. <form id="myform" method="post" action="success.html">
  14.  
  15. <ul>
  16.  
  17. <li>
  18.  
  19. 邮箱:<input type="text" name="email" check="required email" />
  20.  
  21. </li>
  22.  
  23. <li>
  24.  
  25. 密码:<input type="password" check="required pwd1" />
  26.  
  27. </li>
  28.  
  29. <li>
  30.  
  31. 确认密码:<input type="password" check="required pwd2" />
  32.  
  33. </li>
  34.  
  35. <li>
  36.  
  37. 手机:<input type="text" name="num" check="required mobile" />
  38.  
  39. </li>
  40.  
  41. <li>
  42.  
  43. 数字:<input type="text" name="num" check="required num" />
  44.  
  45. </li>
  46.  
  47. <li>
  48.  
  49. 地址:<textarea cols="5" rows="5" check="required"></textarea>
  50.  
  51. </li>
  52.  
  53. <li>
  54.  
  55. 不加check验证的文本框:<input type="text" name="num" />
  56.  
  57. </li>
  58.  
  59. </ul>
  60.  
  61. <input type="submit" value="提交" />
  62.  
  63. </form>
  64.  
  65. <script src="js/jquery-1.4.4.min.js" type="text/javascript"></script>
  66.  
  67. <script src="js/jquery.similar.checkForm.js" type="text/javascript"></script>
  68.  
  69. <script type="text/javascript">
  70.  
  71. $("#myform").checkForm();
  72.  
  73. </script>
  74.  
  75. </body>
  76.  
  77. </html>

转自a5源码 http://down.admin5.com/info/2015/1124/129900.html

jquery实现表单验证简单实例的更多相关文章

  1. jQuery formValidator表单验证插件

    什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件. 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人 ...

  2. 【干货】Laravel --Validate (表单验证) 使用实例

    前言 : Laravel 提供了多种方法来验证应用输入数据.默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验 ...

  3. 【锋利的jQuery】表单验证插件踩坑

    和前几篇博文提到的一样,由于版本原因,[锋利的jQuery]表单验证插件部分又出现照着敲不出效果的情况. 书中的使用方法: 1. 引入jquery源文件, 2. 引入表单验证插件js文件, 3. 在f ...

  4. ASP.NET MVC Jquery Validate 表单验证的多种方式

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  5. [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍

    在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...

  6. Jquery Validate 表单验证的多种方式

    ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...

  7. jQuery的表单验证

    jQuery的表单验证 直接上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  8. Jquery 实现表单验证,所有验证通过方可提交

    1. [代码]Jquery 实现表单验证,所有验证通过方可提交 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...

  9. jQuery Validate 表单验证 — 用户注册简单应用

    相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...

随机推荐

  1. arm汇编学习(五)

    新增个手写GNU语法arm的方法,以后可以狂逆狂写 hello.S文件 .data msg: .ascii "Hello, ARM!\n" len = . - msg .text ...

  2. ubuntu18.04安装谷歌浏览器

    sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ wget -q ...

  3. Java日志系统

    前言 各组件之间的关系: slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实 ...

  4. 机器学习之感知器算法原理和Python实现

    (1)感知器模型 感知器模型包含多个输入节点:X0-Xn,权重矩阵W0-Wn(其中X0和W0代表的偏置因子,一般X0=1,图中X0处应该是Xn)一个输出节点O,激活函数是sign函数. (2)感知器学 ...

  5. [19/03/26-星期二] 容器_Map(图、键值对、映射)接口之HashMap(散列映射)&TreeMap(树映射)

    一.概念&方法 现实生活中,我们经常需要成对存储某些信息.比如,我们使用的微信,一个手机号只能对应一个微信账户,这就是一种成对存储的关系. Map就是用来存储“键(key)-值(value) ...

  6. 从源码看String,StringBuffer,StringBuilder的区别

    前言 看了一篇文章,大概是讲面试中的java基础的,有如题这么个面试题.我又翻了一些文章看了下,然后去看源码.看一下源码大概能更加了解一些. String String类是final的,表示不可被继承 ...

  7. 解决vuex requires a Promise polyfill in this browser问题

    造成这种现象的原因归根究底就是浏览器对ES6中的promise无法支持,因此需要通过引入babel-polyfill来是我们的浏览器正常使用es6的功能 首先通过npm来安装: npm install ...

  8. python单元测试unittest框架

    环境:PyCharm 2016.2 + python 3.5 待测试的类:(Widget.py) 测试类:(Auto.py) 测试结果: 总结:1.第一步:先写好测试类2.第二步:导入unittest ...

  9. 火狐中jq的attr出现的bug问题用prop代替

    再工作的时候遇到一个很奇怪的问题 ,就是attr属性不好使!就问度娘去了...... 结果如下: .prop()   1..prop( propertyName ) 获取匹配集合中第一个元素的Prop ...

  10. Gradle Goodness: Task Output Annotations Create Directory Automatically

    Gradle Goodness: Task Output Annotations Create Directory Automatically One of the great features of ...