最近在做一个用户注册登录的页面,资料查寻过程中发现了一个非常不错的客户端验证的极品-jQuery.validate。
它是著名的JavaScript包jQuery的一个插件,其实它还有其它的一些插件应该都爽,有待慢慢来学习

官方地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ 
jQuery用户手册:http://jquery.org.cn/visual/cn/index.xml

开发使用起来非常简单明了, 
我的代码:

  1. $(document).ready(function(){
  2. /* 设置默认属性 */
  3. $.validator.setDefaults({
  4. submitHandler: function(form) { form.submit(); }
  5. });
  6. // 中文字两个字节
  7. jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
  8. var length = value.length;
  9. for(var i = 0; i < value.length; i++){
  10. if(value.charCodeAt(i) > 127){
  11. length++;
  12. }
  13. }
  14. return this.optional(element) || ( length >= param[0] && length <= param[1] );
  15. }, "请确保输入的值在3-15个字节之间(一个中文字算2个字节)");
  16. /* 追加自定义验证方法 */
  17. // 身份证号码验证
  18. jQuery.validator.addMethod("isIdCardNo", function(value, element) {
  19. return this.optional(element) || isIdCardNo(value);
  20. }, "请正确输入您的身份证号码");
  21. // 字符验证
  22. jQuery.validator.addMethod("userName", function(value, element) {
  23. return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);
  24. }, "用户名只能包括中文字、英文字母、数字和下划线");
  25. // 手机号码验证
  26. jQuery.validator.addMethod("isMobile", function(value, element) {
  27. var length = value.length;
  28. return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/.test(value));
  29. }, "请正确填写您的手机号码");
  30. // 电话号码验证
  31. jQuery.validator.addMethod("isPhone", function(value, element) {
  32. var tel = /^(\d{3,4}-?)?\d{7,9}$/g;
  33. return this.optional(element) || (tel.test(value));
  34. }, "请正确填写您的电话号码");
  35. // 邮政编码验证
  36. jQuery.validator.addMethod("isZipCode", function(value, element) {
  37. var tel = /^[0-9]{6}$/;
  38. return this.optional(element) || (tel.test(value));
  39. }, "请正确填写您的邮政编码");
  40. $(regFrom).validate({
  41. /* 设置验证规则 */
  42. rules: {
  43. userName: {
  44. required: true,
  45. userName: true,
  46. byteRangeLength: [3,15]
  47. },
  48. password: {
  49. required: true,
  50. minLength: 5
  51. },
  52. repassword: {
  53. required: true,
  54. minLength: 5,
  55. equalTo: "#password"
  56. },
  57. question: {
  58. required: true
  59. },
  60. answer: {
  61. required: true
  62. },
  63. realName: {
  64. required: true
  65. },
  66. cardNumber: {
  67. isIdCardNo: true
  68. },
  69. mobilePhone: {
  70. isMobile: true
  71. },
  72. phone: {
  73. isPhone: true
  74. },
  75. email: {
  76. required: true,
  77. email: true
  78. },
  79. zipCode: {
  80. isZipCode:true
  81. }
  82. },
  83. /* 设置错误信息 */
  84. messages: {
  85. userName: {
  86. required: "请填写用户名",
  87. byteRangeLength: "用户名必须在3-15个字符之间(一个中文字算2个字符)"
  88. },
  89. password: {
  90. required: "请填写密码",
  91. minlength: jQuery.format("输入{0}.")
  92. },
  93. repassword: {
  94. required: "请填写确认密码",
  95. equalTo: "两次密码输入不相同"
  96. },
  97. question: {
  98. required: "请填写您的密码提示问题"
  99. },
  100. answer: {
  101. required: "请填写您的密码提示答案"
  102. },
  103. realName: {
  104. required: "请填写您的真实姓名"
  105. },
  106. email: {
  107. required: "请输入一个Email地址",
  108. email: "请输入一个有效的Email地址"
  109. }
  110. },
  111. /* 错误信息的显示位置 */
  112. errorPlacement: function(error, element) {
  113. error.appendTo( element.parent() );
  114. },
  115. /* 验证通过时的处理 */
  116. success: function(label) {
  117. // set   as text for IE
  118. label.html(" ").addClass("checked");
  119. },
  120. /* 获得焦点时不验证 */
  121. focusInvalid: false,
  122. onkeyup: false
  123. });
  124. // 输入框获得焦点时,样式设置
  125. $('input').focus(function(){
  126. if($(this).is(":text") || $(this).is(":password"))
  127. $(this).addClass('focus');
  128. if ($(this).hasClass('have_tooltip')) {
  129. $(this).parent().parent().removeClass('field_normal').addClass('field_focus');
  130. }
  131. });
  132. // 输入框失去焦点时,样式设置
  133. $('input').blur(function() {
  134. $(this).removeClass('focus');
  135. if ($(this).hasClass('have_tooltip')) {
  136. $(this).parent().parent().removeClass('field_focus').addClass('field_normal');
  137. }
  138. });
  139. });

网上的资料有人说,它跟prototype包会有冲突,我还没有同时使用过,这点不是很清楚,但我是发现一个问题: 
对于最小/大长度的验证方法,作者可能考虑到大家的命名习惯不同,同时做了minLength和minlength(maxLength和maxlength)方法,应该哪一个都是可以的,但对于用户Message来说,只能够定义针对minlength(maxlength),才能调用用户自定义的Message, 
否则只是调用包的默认Message,但具体原因还没有查清楚。同时,这个插件提供了本地化的消息,但对于我这里初学者来说,怎么使用它还有待摸索!

客户端验证的极品--jQuery.validator的更多相关文章

  1. (转)[jQuery]使用jQuery.Validate进行客户端验证(初级篇)——不使用微软验证控件的理由

    以前在做项目的时候就有个很大心病,就是微软的验证控件,虽然微软的验证控件可以帮我们完成大部分的验证,验证也很可靠上手也很容易,但是我就是觉得不爽,主要理由有以下几点: 1.拖控件太麻烦,这个是微软控件 ...

  2. [jQuery]使用jQuery.Validate进行客户端验证(初级篇)

    以前在做项目的时候就有个很大心病,就是微软的验证控件,虽然微软的验证控件可以帮我们完成大部分的验证,验证也很可靠上手也很容易,但是我就是觉得不爽,主要理由有以下几点: 1.拖控件太麻烦,这个是微软控件 ...

  3. ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现

    在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的.服务端验证最终实现在相应的ModelVa ...

  4. ASP.NET MVC的客户端验证:jQuery的验证

    之前我们一直讨论的Model验证仅限于服务端验证,即在Web服务器根据相应的规则对请求数据实施验证.如果我们能够在客户端(浏览器)对用户输入的数据先进行验证,这样会减少针对服务器请求的频率,从而缓解W ...

  5. jQuery.validator 验证规则详解

    前言:jQuery.validator是一款非常不错的表单验证插件,验证方式非常简单方便,它还对HTML5做了兼容处理,了解了验证规则,就基本掌握了它的使用,下面就让我一一道来 jQuery.vali ...

  6. jQuery 表单验证 jquery.validator.js

    前端开发中经常会碰到表单的制作,其中必备的功能就是提交前的一些简单的验证,非空啊.手机号码啊.E-mail等等等等,这里是一个 jQuery 的表单验证插件,蛮好用的,收录一下. 下面是验证的效果图: ...

  7. jquery.validator 手机号验证

    1.在input中加上mobile="true",maxlength="11" <label class="w170 control-label ...

  8. jq里验证插件的自定义方法Jquery.validator.addMethod()示例

    最近写验证的时候感觉原生的验证谢了一遍又一遍,就想到了“不要重复造轮子,学会管理自己的工具库”这句名言,于是尝试用jq的validator. 用过又发现需要自定义方法去验证,于是去查官网,写了Jque ...

  9. 自定义表单验证--jquery validator addMethod的使用

    原文地址:jquery validator addMethod 方法的使用作者:蜡笔小玄 jQuery.validate是一款非常不错的表单验证工具,简单易上手,而且能达到很好的体验效果,虽然说在项目 ...

随机推荐

  1. 通过LDF文件实现日志回滚将数据恢复(转)

    该方法数据库恢复(www.db-recovery.com)思路 1. 创建数据TEST 2. 创建表TEMP_01 3. 在表TEMP_01中插入100条数据 4. 备份现有的数据库 5. 再次向表T ...

  2. Aspose.Words 总结

    生成答题卡 try { string tempPath = @"D:\moban\ttt.doc"; //Open document and create Documentbuil ...

  3. H5 App如此强悍,要降薪的恐怕已不只是iOS程序员

    2015年的最后几天,移动开发圈里最为火爆的话题之一无疑是“iOS程序员月薪降至12K”这则报道. 有人认为这是O2O创业遇冷所致,也有人认为这是iOS生态过于封闭致使智能硬件等新领域对iOS开发者的 ...

  4. JSP Ajax

    html代码: <!DOCTYPE html> <html> <script> function display() { var div=document.getE ...

  5. nodejs+socketio+redis实现前端消息实时推送

    1. 后端部分 发送redis消息 可以参考此篇实现(直接使用Jedis即可) http://www.cnblogs.com/binyue/p/4763352.html 2.后端部分: 接收redis ...

  6. Windows系统下Oracle数据库冷备

    一.背景: 具体的场景是数据库不是普通的OLTP系统,更像是OLAP系统,数据的更新频率很低,在noarchivelog 模式下运行,实时性要求低,但是数据只有一份不能弄丢,需要应付磁盘损坏等情况.这 ...

  7. [转]LoadRunner脚本录制常见问题整理

    LoadRunner脚本录制常见问题整理 1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面 ...

  8. ASP.NET 学习小记 -- “迷你”MVC实现(2)

    Controller的激活 ASP.NET MVC的URL路由系统通过注册的路由表对HTTO请求进行解析从而得到一个用户封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutin ...

  9. [转]python 之字典{}(Hashmap)

    字典 python里的字典就像java里的HashMap,以键值对的方式存在并操作,其特点如下 通过键来存取,而非偏移量: 键值对是无序的: 键和值可以是任意对象: 长度可变,任意嵌套: 在字典里,不 ...

  10. css helper class

    应该习惯的css helper class .text-centered text-align: center; .text-right text-align: right; .small small ...