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. windbg .net 程序的死锁检测 常用方法(个人备份笔记)

    //死锁检测 .load sosex.dll :> !dlk :> !mk -a The mk command displays a call stack of the currently ...

  2. fzou 1759 Super A^B mod C

    Problem 1759 Super A^B mod CAccept: 456    Submit: 1488Time Limit: 1000 mSec    Memory Limit : 32768 ...

  3. Microsoft ReportViewer 控件类型版本兼容问题及解决方法

    错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Re ...

  4. 使用NOPI读取Word、Excel文档内容

    使用NOPI读取Excel的例子很多,读取Word的例子不多. Excel的解析方式有多中,可以使用ODBC查询,把Excel作为一个数据集对待.也可以使用文档结构模型的方式进行解析,即解析Workb ...

  5. unity3d之简单的时钟倒计时demo

    输入结束时间,开始倒计时,时间差不超过一天,附上代码:(关于个位数显示,加个判断如果小于10 显示的字符串加上0) using System.Collections; using System.Col ...

  6. Jquery把获取到的input值转换成json

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. python学习之老男孩python全栈第九期_day022知识点总结——初识面向对象

    一. 面向对象的引入# 人狗大战 def person(name,HP,aggr,sex): person = { 'name':name, # 昵称 'HP':HP, # 生命值 'aggr':ag ...

  8. MAVLink Linux/QNX/MacOs Integration Tutorial (UDP)

    MAVLink Linux/QNX/MacOs Integration Tutorial (UDP) Overview This program was written to test the udp ...

  9. Oracle 11g 管理工具及SQL Deverloper 的使用教程

    Oracle 管理工具及SQL Deverloper 的使用教程 默认的网站的管理工具 网址格式:https://机器名:1158/em 默认:https://localhost:1158/em 机器 ...

  10. C#多线程顺序依赖执行控制

    在开发过程中,经常需要多个任务并行的执行的场景,同时任务之间又需要先后依赖的关系.针对这样的处理逻辑,通常会采用多线程的程序模型来实现. 比如A.B.C三个线程,A和B需要同时启动,并行处理,且B需要 ...