1. 表单验证实例(空验证,密码确认验证,email验证)
    我们可以用单独的js写表单验证,但是extjs已经为我们想到了(自己单独写反而不方便)。
    在验证之前,我不得不提两个小知识点:

    //大家在很多的extjs代码中都看到了这两个,他们都起提示作用的
    
    Ext.QuickTips.init();//支持tips提示
    
    Ext.form.Field.prototype.msgTarget='side';//提示的方式,枚举值为"qtip","title","under","side",id(元素id)
    
              //side方式用的较多,右边出现红色感叹号,鼠标上去出现错误提示,其他的我就不介绍了,可自行验证
    
    //大家可以分别去掉这两行代码,看效果就会明白他们的作用,(放在onReady的function(){}中)

    1.我们看一个最简单的例子:空验证(其实这不算是一个专门的验证例子)

    //空验证的两个参数
    
    1.allowBlank:false//false则不能为空,默认为true
    
    2.blankText:string//当为空时的错误提示信息

    js代码为:

    
    var form1 = new Ext.form.FormPanel({
    
           width:350,
    
           frame:true,
    
           renderTo:"form1",
    
           labelWidth:80,
    
           title:"FormPanel",
    
           bodyStyle:"padding:5px 5px 0",
    
           defaults:{width:150,xtype:"textfield",inputType:"password"},
    
           items:[
    
                   {fieldLabel:"不能为空",
    
                    allowBlank:false,//不允许为空
    
                     blankText:"不能为空,请填写",//错误提示信息,默认为This field is required!
    
                    id:"blanktest",
    
                    anchor:"90%"
    
                   }
    
           ]
    
        });
    


    2.用vtype格式进行简单的验证。
    在此举邮件验证的例子,重写上面代码的items配置:

    
    items:[
    
                   {fieldLabel:"不能为空",
    
                    vtype:"email",//email格式验证
    
                    vtypeText:"不是有效的邮箱地址",//错误提示信息,默认值我就不说了
    
                    id:"blanktest",
    
                    anchor:"90%"
    
                   }
    


    你可以修改上面的vtype为以下的几种extjs的vtype默认支持的验证:

    //form验证中vtype的默认支持类型
    
    1.alpha //只能输入字母,无法输入其他(如数字,特殊符号等)
    
    2.alphanum//只能输入字母和数字,无法输入其他
    
    3.email//email验证,要求的格式是"langsin@gmail.com"
    
    4.url//url格式验证,要求的格式是http://www.***

    3.确认密码验证(高级自定义验证)
    前面的验证都是extjs已经提供的验证,我们也可以自定义验证函数,比上面要复杂点了。我们一起做一个密码确认的例子。
    我们修改前面的代码:

    
    //先用Ext.apply方法添加自定义的password验证函数(也可以取其他的名字)
    
    Ext.apply(Ext.form.VTypes,{
    
        password:function(val,field){//val指这里的文本框值,field指这个文本框组件,大家要明白这个意思
    
           if(field.confirmTo){//confirmTo是我们自定义的配置参数,一般用来保存另外的组件的id值
    
               var pwd=Ext.get(field.confirmTo);//取得confirmTo的那个id的值
    
               return (val==pwd.getValue());
    
           }
    
           return true;
    
        }
    
    });
    
    //配置items参数
    
    items:[{fieldLabel:"密码",
    
                    id:"pass1",
    
                    anchor:"90%"
    
                   },{
    
                    fieldLabel:"确认密码",
    
                    id:"pass2",
    
                    vtype:"password",//自定义的验证类型
    
                      vtypeText:"两次密码不一致!",
    
                      confirmTo:"pass1",//要比较的另外一个的组件的id
    
                    anchor:"90%"
    
                   }
    


    关于vtype的内容还有很多内容要挖掘,但现在我们就点到这里为止,以后有机会再讨论它的其他高级验证。
    不知不觉中写了这么多,大家都要歇息了,我们下次再接着讨论,
    (因为本人近期考试和其他锁杂事情,近期可能更新较慢,还请大家海量,耐心,支持!)

  2. //首先说明一下这些是extjs扩展的验证方法  apply 复制
  3. Ext.apply(Ext.form.field.VTypes,
  4. {
  5. daterange: function(val, field)
  6. {
  7. var date = field.parseDate(val);
  8. // We need to force the picker to update values to recaluate the disabled dates display
  9. var dispUpd = function(picker)
  10. {
  11. var ad = picker.activeDate;
  12. picker.activeDate = null;
  13. picker.update(ad);
  14. };
  15. if (field.startDateField)
  16. {
  17. var sd = Ext.getCmp(field.startDateField);
  18. sd.maxValue = date;
  19. if (sd.menu && sd.menu.picker)
  20. {
  21. sd.menu.picker.maxDate = date;
  22. dispUpd(sd.menu.picker);
  23. }
  24. }
  25. else if (field.endDateField)
  26. {
  27. var ed = Ext.getCmp(field.endDateField);
  28. ed.minValue = date;
  29. if (ed.menu && ed.menu.picker)
  30. {
  31. ed.menu.picker.minDate = date;
  32. dispUpd(ed.menu.picker);
  33. }
  34. }
  35. return true;
  36. },
  37. daterangeText:'起始时间不能大于结束时间'
  38. password: function(val, field)
  39. {
  40. if (field.initialPassField)
  41. {
  42. var pwd = Ext.getCmp(field.initialPassField);
  43. return (val == pwd.getValue());
  44. }
  45. return true;
  46. },
  47. passwordText: '两次输入的密码不一致!',
  48. chinese:function(val,field)
  49. {
  50. var reg = /^[/u4e00-/u9fa5]+$/i;
  51. if(!reg.test(val))
  52. {
  53. return false;
  54. }
  55. return true;
  56. },
  57. chineseText:'请输入中文',
  58. age:function(val,field)
  59. {
  60. try
  61. {
  62. if(parseInt(val) >= 18 && parseInt(val) <= 100)
  63. return true;
  64. return false;
  65. }
  66. catch(err)
  67. {
  68. return false;
  69. }
  70. },
  71. ageText:'年龄输入有误',
  72. alphanum:function(val,field)
  73. {
  74. try
  75. {
  76. if(!//W/.test(val))
  77. return true;
  78. return false;
  79. }
  80. catch(e)
  81. {
  82. return false;
  83. }
  84. },
  85. alphanumText:'请输入英文字母或是数字,其它字符是不允许的.',
  86. url:function(val,field)
  87. {
  88. try
  89. {
  90. if(/^(http|https|ftp):////(([A-Z0-9][A-Z0-9_-]*)(/.[A-Z0-9][A-Z0-9_-]*)+)(:(/d+))?//?/i.test(val))
  91. return true;
  92. return false;
  93. }
  94. catch(e)
  95. {
  96. return false;
  97. }
  98. },
  99. urlText:'请输入有效的URL地址.',
  100. max:function(val,field)
  101. {
  102. try
  103. {
  104. if(parseFloat(val) <= parseFloat(field.max))
  105. return true;
  106. return false;
  107. }
  108. catch(e)
  109. {
  110. return false;
  111. }
  112. },
  113. maxText:'超过最大值',
  114. min:function(val,field)
  115. {
  116. try
  117. {
  118. if(parseFloat(val) >= parseFloat(field.min))
  119. return true;
  120. return false;
  121. }
  122. catch(e)
  123. {
  124. return false;
  125. }
  126. },
  127. minText:'小于最小值',
  128. datecn:function(val,field)
  129. {
  130. try
  131. {
  132. var regex = /^(/d{4})-(/d{2})-(/d{2})$/;
  133. if(!regex.test(val)) return false;
  134. var d = new Date(val.replace(regex, '$1/$2/$3'));
  135. return (parseInt(RegExp.$2, 10) == (1+d.getMonth())) && (parseInt(RegExp.$3, 10) == d.getDate())&&(parseInt(RegExp.$1, 10) == d.getFullYear());
  136. }
  137. catch(e)
  138. {
  139. return false;
  140. }
  141. },
  142. datecnText:'请使用这样的日期格式: yyyy-mm-dd. 例如:2008-06-20.',
  143. integer:function(val,field)
  144. {
  145. try
  146. {
  147. if(/^[-+]?[/d]+$/.test(val))
  148. return true;
  149. return false;
  150. }
  151. catch(e)
  152. {
  153. return false;
  154. }
  155. },
  156. integerText:'请输入正确的整数',
  157. minlength:function(val,field)
  158. {
  159. try
  160. {
  161. if(val.length >= parseInt(field.minlen))
  162. return true;
  163. return false
  164. }
  165. catch(e)
  166. {
  167. return false;
  168. }
  169. },
  170. minlengthText:'长度过小',
  171. maxlength:function(val,field)
  172. {
  173. try
  174. {
  175. if(val.length <= parseInt(field.maxlen))
  176. return true;
  177. return false;
  178. }
  179. catch(e)
  180. {
  181. return false;
  182. }
  183. },
  184. maxlengthText:'长度过大',
  185. ip:function(val,field)
  186. {
  187. try
  188. {
  189. if((/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(val)))
  190. return true;
  191. return false;
  192. }
  193. catch(e)
  194. {
  195. return false;
  196. }
  197. },
  198. ipText:'请输入正确的IP地址',
  199. phone:function(val,field)
  200. {
  201. try
  202. {
  203. if(/^((0[1-9]{3})?(0[12][0-9])?[-])?/d{6,8}$/.test(val))
  204. return true;
  205. return false;
  206. }
  207. catch(e)
  208. {
  209. return false;
  210. }
  211. },
  212. phoneText:'请输入正确的电话号码,如:0920-29392929',
  213. mobilephone:function(val,field)
  214. {
  215. try
  216. {
  217. if(/(^0?[1][35][0-9]{9}$)/.test(val))
  218. return true;
  219. return false;
  220. }
  221. catch(e)
  222. {
  223. return false;
  224. }
  225. },
  226. mobilephoneText:'请输入正确的手机号码',
  227. alpha:function(val,field)
  228. {
  229. try
  230. {
  231. if( /^[a-zA-Z]+$/.test(val))
  232. return true;
  233. return false;
  234. }
  235. catch(e)
  236. {
  237. return false;
  238. }
  239. },
  240. alphaText:'请输入英文字母'
  241. });

Extjs自定义验证介绍的更多相关文章

  1. ExtJs 自定义Vtype验证

    最近公司开发项目在用ExtJs,碰到验证的就大概的总结了一些常用的验证.自定义的验证主要有两种方式:一种是单字段的自定义验证,另一种是多字段间的验证.对于单字段的验证主要通过regex配置项指定自定义 ...

  2. 重写ValidateEntity虚方法实现可控的上下文验证和自定义验证

    上篇文章介绍了ValidationAttribute和IValidatableObject.Validate验证,但是这种验证还是稍微简单了,对于复杂的实体,例如:继承过来的实体.实现某接口的实体等等 ...

  3. Asp.net MVC验证那些事(4)-- 自定义验证特性

    在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...

  4. WinForm自定义验证控件

    本文转载:http://blog.csdn.net/ziyouli/article/details/7583824 此篇博文不错:http://blog.csdn.net/sony0732/artic ...

  5. Angular:Reactive Form的使用方法和自定义验证器

    本文将介绍Angular(Angular2+)中Reactive Form的有关内容,包括: Reactive Form创建方法 如何使用验证 自定义验证器 下面开始进入正文! Reactive Fo ...

  6. yii2中的rules 自定义验证规则详解

    yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...

  7. 使用自定义验证组件库扩展 Windows 窗体

    使用自定义验证组件库扩展 Windows 窗体             1(共 1)对本文的评价是有帮助 - 评价此主题                          发布日期 : 8/24/20 ...

  8. laravel5.5 自定义验证规则——手机验证RULE

    相信很多小伙伴和我一样烦恼,laravel没有自带手机号的验证,每次验证手机号都要写正则这类的规则,每次都是repeat yourself!违背了编码的一个原则,就是Don't repeat your ...

  9. Asp.Net Core 自定义验证属性

    很多时候,在模型上的验证需要自己定义一些特定于我们需求的验证属性.所以这一篇我们就来介绍一下怎么自定义验证属性. 我们来实现一个验证邮箱域名的自定义验证属性,当然,最重要的是需要定义一个继承自Vali ...

随机推荐

  1. Cookie,Sesstion,Application 缓存。

    Cookie客户端缓存. 1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要 ...

  2. js实现队列结构

    创建队列 let items function Queue { this.enqueue = function(element){ items.push(element) } this.dequeue ...

  3. MyEclipse中设置开发项目时使用的默认JDK

    安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...

  4. laravel开发之-网站初建

    1 cmd 打开电脑命令窗口 2 目录切换到网站根目录 3 输入命令:php artisan serve 4 model 生成命令:php artisan make:model 需要生成的model名 ...

  5. Linux Kernel 4.11首个候选版本开放下载

    Linus Torvalds宣布了即将到来的Linux Kernel 4.11内核分支的首个候选(RC)版本,用户可下载.编译并在自己的GNU/Linux发行版本中进行测试.Linus Torvald ...

  6. [Swift] 使用Playground

    使用Playground 1. 新建Playground 2. 写最简单的代码

  7. 用ISA2006配置单网卡缓存服务器

    有些公司在部署ISA服务器之前已经有了自己的网络访问解决方案,例如通过硬件防火墙访问互联网,如果这种网络访问解决方案运行效果较好,公司就未必希望用ISA来替代当前的方案,毕竟稳定是第一位的.但在这种情 ...

  8. composer 应用【Modern PHP】

    目录 安装(linux) composer.lock 文件 composer.josn 文件 自动加载PHP组件 组件包库地址 实例 composer私有仓库 composer 遵循PSR准则,解决安 ...

  9. 沉淀再出发:如何在eclipse中查看java的核心代码

    沉淀再出发:如何在eclipse中查看java的核心代码 一.前言   很多时候我们在eclipse中按F3键打算查看某一个系统类的定义的时候,总是弹出找不到类这样的界面,这里我们把核心对应的代码加进 ...

  10. Android sdk manager 更新 5.0 太难了,终于解决

    由于众所周知的原因,必须在hosts中增加一些网址对应,才可以更新 203.208.46.146 www.google.com 203.208.46.1 plus.google.com 203.208 ...