1. extjs表单验证
  2. //放在onReady的function(){}中
  3. Ext.QuickTips.init(); //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息。
  4. Ext.form.Field.prototype.msgTarget='side'; //提示的方式,枚举值为
  5. qtip-当鼠标移动到控件上面时显示提示
  6. title-在浏览器的标题显示,但是测试结果是和qtip一样的
  7. under-在控件的底下显示错误提示
  8. side-在控件右边显示一个错误图标,鼠标指向图标时显示错误提示. 默认值.
  9. id-[element id]错误提示显示在指定id的HTML元件中
  10. 1.一个最简单的例子:空验证
  11. //空验证的两个参数
  12. 1.allowBlank:false//false则不能为空,默认为true
  13. 2.blankText:string//当为空时的错误提示信息
  14. js代码为:
  15. var form1 = new Ext.form.FormPanel({
  16. width : 350,
  17. renderTo : "form1",
  18. title : "FormPanel",
  19. defaults : {xtype:"textfield",inputType:"password"},
  20. items : [{
  21. id : "blanktest",
  22. fieldLabel : "不能为空",
  23. allowBlank : false,//不允许为空
  24. blankText : "不能为空"//错误提示信息,默认为This field is required!
  25. }]
  26. });
  27. 2.用vtype格式进行简单的验证。
  28. 在此举邮件验证的例子,重写上面代码的items配置:
  29. items:[{
  30. fieldLabel : "不能为空",
  31. vtype : "email",//email格式验证
  32. vtypeText : "不是有效的邮箱地址",//错误提示信息,默认值我就不说了
  33. id : "blanktest",
  34. anchor : "90%"
  35. }
  36. 你可以修改上面的vtype为以下的几种extjs的vtype默认支持的验证:
  37. //form验证中vtype的默认支持类型
  38. 1.alpha //只能输入字母,无法输入其他(如数字,特殊符号等)
  39. 2.alphanum //只能输入字母和数字,无法输入其他
  40. 3.email //email验证,要求的格式是"langsin@gmail.com"
  41. 4.url //url格式验证,要求的格式是[url]
  42. 3.高级自定义密码验证
  43. 前面的验证都是extjs已经提供的,我们也可以自定义验证函数。
  44. //先用Ext.apply方法添加自定义的password验证函数(也可以取其他的名字)
  45. Ext.apply(Ext.form.VTypes,{
  46. password:function(val,field){ //val指这里的文本框值,field指这个文本框组件,大家要明白这个意思
  47. if(field.confirmTo){ //confirmTo是我们自定义的配置参数,一般用来保存另外的组件的id值
  48. var pwd=Ext.get(field.confirmTo); //取得confirmTo的那个id的值
  49. return (val==pwd.getValue());
  50. }
  51. return true;
  52. }
  53. });
  54. //配置items参数
  55. items:[
  56. {
  57. fieldLabel : "密码",
  58. id : "pass1",
  59. },{
  60. fieldLabel : "确认密码",
  61. id : "pass2",
  62. vtype : "password",//自定义的验证类型
  63. vtypeText : "两次密码不一致!",
  64. confirmTo : "pass1",//要比较的另外一个的组件的id
  65. }
  66. ]
  67. 4.使用正则表达式验证
  68. new Ext.form.TextField({
  69. fieldLabel : "姓名",
  70. name : "author_nam",
  71. regex : /[/u4e00-/u9fa5]/, //正则表达式在/...../之间. [/u4e00-/u9fa5] : 只能输入中文.
  72. regexText : "只能输入中文!",
  73. allowBlank : false //此验证依然有效.不许为空.




  1. Ext.apply(Ext.form.VTypes,
  2. {
  3. daterange: function(val, field)
  4. {
  5. var date = field.parseDate(val);

  6. // We need to force the picker to update values to recaluate the disabled dates display
  7. var dispUpd = function(picker)
  8. {
  9. var ad = picker.activeDate;
  10. picker.activeDate = null;
  11. picker.update(ad);
  12. };

  13. if (field.startDateField)
  14. {
  15. var sd = Ext.getCmp(field.startDateField);
  16. sd.maxValue = date;
  17. if (sd.menu && sd.menu.picker)
  18. {
  19. sd.menu.picker.maxDate = date;
  20. dispUpd(sd.menu.picker);
  21. }
  22. }
  23. else if (field.endDateField)
  24. {
  25. var ed = Ext.getCmp(field.endDateField);
  26. ed.minValue = date;
  27. if (ed.menu && ed.menu.picker)
  28. {
  29. ed.menu.picker.minDate = date;
  30. dispUpd(ed.menu.picker);
  31. }
  32. }
  33. return true;
  34. },

  35. password: function(val, field)
  36. {
  37. if (field.initialPassField)
  38. {
  39. var pwd = Ext.getCmp(field.initialPassField);
  40. return (val == pwd.getValue());
  41. }
  42. return true;
  43. },
  44. passwordText: '两次输入的密码不一致!',

  45. chinese:function(val,field)
  46. {
  47. var reg = /^[/u4e00-/u9fa5]+$/i;
  48. if(!reg.test(val))
  49. {
  50. return false;
  51. }
  52. return true;
  53. },
  54. chineseText:'请输入中文',

  55. age:function(val,field)
  56. {
  57. try
  58. {
  59. if(parseInt(val) >= 18 && parseInt(val) <= 100)
  60. return true;
  61. return false;
  62. }
  63. catch(err)
  64. {
  65. return false;
  66. }
  67. },
  68. ageText:'年龄输入有误',

  69. alphanum:function(val,field)
  70. {
  71. try
  72. {
  73. if(!//W/.test(val))
  74. return true;
  75. return false;
  76. }
  77. catch(e)
  78. {
  79. return false;
  80. }
  81. },
  82. alphanumText:'请输入英文字母或是数字,其它字符是不允许的.',

  83. url:function(val,field)
  84. {
  85. try
  86. {
  87. if(/^(http|https|ftp):////(([A-Z0-9][A-Z0-9_-]*)(/.[A-Z0-9][A-Z0-9_-]*)+)(:(/d+))?//?/i.test(val))
  88. return true;
  89. return false;
  90. }
  91. catch(e)
  92. {
  93. return false;
  94. }
  95. },
  96. urlText:'请输入有效的URL地址.',

  97. max:function(val,field)
  98. {
  99. try
  100. {
  101. if(parseFloat(val) <= parseFloat(field.max))
  102. return true;
  103. return false;
  104. }
  105. catch(e)
  106. {
  107. return false;
  108. }
  109. },
  110. maxText:'超过最大值',

  111. min:function(val,field)
  112. {
  113. try
  114. {
  115. if(parseFloat(val) >= parseFloat(field.min))
  116. return true;
  117. return false;
  118. }
  119. catch(e)
  120. {
  121. return false;
  122. }
  123. },
  124. minText:'小于最小值',

  125. datecn:function(val,field)
  126. {
  127. try
  128. {
  129. var regex = /^(/d{4})-(/d{2})-(/d{2})$/;
  130. if(!regex.test(val)) return false;
  131. var d = new Date(val.replace(regex, '$1/$2/$3'));
  132. return (parseInt(RegExp.$2, 10) == (1+d.getMonth())) && (parseInt(RegExp.$3, 10) == d.getDate())&&(parseInt(RegExp.$1, 10) == d.getFullYear());
  133. }
  134. catch(e)
  135. {
  136. return false;
  137. }
  138. },
  139. datecnText:'请使用这样的日期格式: yyyy-mm-dd. 例如:2008-06-20.',

  140. integer:function(val,field)
  141. {
  142. try
  143. {
  144. if(/^[-+]?[/d]+$/.test(val))
  145. return true;
  146. return false;
  147. }
  148. catch(e)
  149. {
  150. return false;
  151. }
  152. },
  153. integerText:'请输入正确的整数',

  154. minlength:function(val,field)
  155. {
  156. try
  157. {
  158. if(val.length >= parseInt(field.minlen))
  159. return true;
  160. return false
  161. }
  162. catch(e)
  163. {
  164. return false;
  165. }
  166. },
  167. minlengthText:'长度过小',

  168. maxlength:function(val,field)
  169. {
  170. try
  171. {
  172. if(val.length <= parseInt(field.maxlen))
  173. return true;
  174. return false;
  175. }
  176. catch(e)
  177. {
  178. return false;
  179. }
  180. },
  181. maxlengthText:'长度过大',

  182. ip:function(val,field)
  183. {
  184. try
  185. {
  186. 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)))
  187. return true;
  188. return false;
  189. }
  190. catch(e)
  191. {
  192. return false;
  193. }
  194. },
  195. ipText:'请输入正确的IP地址',

  196. phone:function(val,field)
  197. {
  198. try
  199. {
  200. if(/^((0[1-9]{3})?(0[12][0-9])?[-])?/d{6,8}$/.test(val))
  201. return true;
  202. return false;
  203. }
  204. catch(e)
  205. {
  206. return false;
  207. }
  208. },
  209. phoneText:'请输入正确的电话号码,如:0920-29392929',

  210. mobilephone:function(val,field)
  211. {
  212. try
  213. {
  214. if(/(^0?[1][35][0-9]{9}$)/.test(val))
  215. return true;
  216. return false;
  217. }
  218. catch(e)
  219. {
  220. return false;
  221. }
  222. },
  223. mobilephoneText:'请输入正确的手机号码',

  224. alpha:function(val,field)
  225. {
  226. try
  227. {
  228. if( /^[a-zA-Z]+$/.test(val))
  229. return true;
  230. return false;
  231. }
  232. catch(e)
  233. {
  234. return false;
  235. }
  236. },
  237. alphaText:'请输入英文字母'
  238. });