extjs中regex和vtype都是用來進行表單驗證的,regex是經過正則表達式對單個輸入控件的內容進行格式驗證,而vtype既能夠對單個控件的輸入格式進行驗證還能對多可控件的內容進行關聯驗證。好比對於兩個日期控件,用regex只能驗證輸入的是否是日期格式,而兩個日期的相對大小關係驗證就無能爲力了,這就須要vtype來完成了。但這並非說vtype比regex正則驗證更強大,由於extjs中默認提供的vtype驗證只有alpha(字母)、alphanum(字母數字)、url(網址)、email(郵件地址)等,這些驗證經過regex也能夠垂手可得的完成,要實現多個控件關聯驗證必需要本身寫代碼。javascript
extjs中regex(正則)用法:java
extjs中與正則驗證相關的屬性是regex和regexText。regex用來輸入正則表達式,regexText則是在驗證失敗時的提示信息。正則驗證很簡單,直接在regex屬性中輸入正則格式便可,下面是extjs中經常使用的正則表達式正則表達式
使用時複製雙引號以前的內容便可
例如:"^\d+$" //非負整數(正整數 + 0) 程序中就是/^\d+$/
"^\d+$" //非負整數(正整數 + 0) "^[0-9]*[1-9][0-9]*$" //正整數
"^((-\d+)|(0+))$" //非正整數(負整數 + 0) "^-[0-9]*[1-9][0-9]*$" //負整數 "^-?\d+$" //整數
"^\d+(\.\d+)?$" //非負浮點數(正浮點數 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點數 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮點數(負浮點數 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負浮點數 "^(-?\d+)(\.\d+)?$" //浮點數
"^[A-Za-z]+$" //由26個英文字母組成的字符串 "^[A-Z]+$" //由26個英文字母的大寫組成的字符串 "^[a-z]+$" //由26個英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串 "^\w+$" //由數字、26個英文字母或者下劃線組成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //電話號碼
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址app
匹配中文字符的正則表達式: [\u4e00-\u9fa5] 匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 匹配賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$函數
vtype用法:extjs做用有vtype和vtypeText兩個屬性。vtype用來輸入驗證函數名稱(要本身寫),vtypeText用來顯示驗證失敗時的提示信息。在此就直接引用別人寫的了:lua
http://blog.csdn.net/xzknet/article/details/6541922url
最近公司開發項目在用ExtJs,碰到驗證的就大概的總結了一些經常使用的驗證。自定義的驗證主要有兩種方式:一種是單字段的自定義驗證,另外一種是多字段間的驗證。對於單字段的驗證主要經過regex配置項指定自定義正則表達式進行驗證,而字段多的驗證能夠經過字定義VType類型進行驗證支持。spa
- Ext.apply(Ext.form.VTypes,
- {
- daterange: function(val, field)
- {
- var date = field.parseDate(val);
-
-
- var dispUpd = function(picker)
- {
- var ad = picker.activeDate;
- picker.activeDate = null;
- picker.update(ad);
- };
-
- if (field.startDateField)
- {
- var sd = Ext.getCmp(field.startDateField);
- sd.maxValue = date;
- if (sd.menu && sd.menu.picker)
- {
- sd.menu.picker.maxDate = date;
- dispUpd(sd.menu.picker);
- }
- }
- else if (field.endDateField)
- {
- var ed = Ext.getCmp(field.endDateField);
- ed.minValue = date;
- if (ed.menu && ed.menu.picker)
- {
- ed.menu.picker.minDate = date;
- dispUpd(ed.menu.picker);
- }
- }
- return true;
- },
-
- password: function(val, field)
- {
- if (field.initialPassField)
- {
- var pwd = Ext.getCmp(field.initialPassField);
- return (val == pwd.getValue());
- }
- return true;
- },
- passwordText: '兩次輸入的密碼不一致!',
-
- chinese:function(val,field)
- {
- var reg = /^[/u4e00-/u9fa5]+$/i;
- if(!reg.test(val))
- {
- return false;
- }
- return true;
- },
- chineseText:'請輸入中文',
-
- age:function(val,field)
- {
- try
- {
- if(parseInt(val) >= 18 && parseInt(val) <= 100)
- return true;
- return false;
- }
- catch(err)
- {
- return false;
- }
- },
- ageText:'年齡輸入有誤',
-
- alphanum:function(val,field)
- {
- try
- {
- if(!
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- alphanumText:'請輸入英文字母或是數字,其它字符是不容許的.',
-
- url:function(val,field)
- {
- try
- {
- if(/^(http|https|ftp):
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- urlText:'請輸入有效的URL地址.',
-
- max:function(val,field)
- {
- try
- {
- if(parseFloat(val) <= parseFloat(field.max))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- maxText:'超過最大值',
-
- min:function(val,field)
- {
- try
- {
- if(parseFloat(val) >= parseFloat(field.min))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- minText:'小於最小值',
-
- datecn:function(val,field)
- {
- try
- {
- var regex = /^(/d{4})-(/d{2})-(/d{2})$/;
- if(!regex.test(val)) return false;
- var d = new Date(val.replace(regex, '$1/$2/$3'));
- return (parseInt(RegExp.$2, 10) == (1+d.getMonth())) && (parseInt(RegExp.$3, 10) == d.getDate())&&(parseInt(RegExp.$1, 10) == d.getFullYear());
- }
- catch(e)
- {
- return false;
- }
- },
- datecnText:'請使用這樣的日期格式: yyyy-mm-dd. 例如:2008-06-20.',
-
- integer:function(val,field)
- {
- try
- {
- if(/^[-+]?[/d]+$/.test(val))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- integerText:'請輸入正確的整數',
-
- minlength:function(val,field)
- {
- try
- {
- if(val.length >= parseInt(field.minlen))
- return true;
- return false
- }
- catch(e)
- {
- return false;
- }
- },
- minlengthText:'長度太小',
-
- maxlength:function(val,field)
- {
- try
- {
- if(val.length <= parseInt(field.maxlen))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- maxlengthText:'長度過大',
-
- ip:function(val,field)
- {
- try
- {
- 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)))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- ipText:'請輸入正確的IP地址',
-
- phone:function(val,field)
- {
- try
- {
- if(/^((0[1-9]{3})?(0[12][0-9])?[-])?/d{6,8}$/.test(val))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- phoneText:'請輸入正確的電話號碼,如:0920-29392929',
-
- mobilephone:function(val,field)
- {
- try
- {
- if(/(^0?[1][35][0-9]{9}$)/.test(val))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- mobilephoneText:'請輸入正確的手機號碼',
-
- alpha:function(val,field)
- {
- try
- {
- if( /^[a-zA-Z]+$/.test(val))
- return true;
- return false;
- }
- catch(e)
- {
- return false;
- }
- },
- alphaText:'請輸入英文字母'
- });
另一種方式擴展一些VType,基本上是用正在表達式的,方便作驗證了。.net