Extjs自定义验证介绍

时间:2024-10-10 19:33:32
  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%"
    
                   }
    
           ]
    
        });
    

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

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

    Extjs自定义验证介绍
    你可以修改上面的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%"
    
                   }
    

    Extjs自定义验证介绍
    关于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. });