本文**:
近日來對ext特別感興趣,也許是它那種oo的設計思想吸引了我,也可以追溯到第一次見到ext那種漂亮的介面開始吧.求神拜佛不如自食其力,為了一點小的問題找遍了google也沒個結果,自己甚少去bbs混,也不熟悉規矩,只能硬著頭皮自己幹了.翻源**是一道必不可少的工序,說來慚愧,自己對js的認識還停留在入門階段.
這裡說說自己對於ext驗證這裡淺薄的理解:
首先看看如下一段**
這裡是對ext.form.vtypes進行擴充套件,增加了我們需要的email驗證.
既然是擴充套件,那麼我們就得先來看看這個父類到底是個什麼樣子.
以上就是ext.form.vtypes的廬山真面目了,這裡返回乙個json的物件其中包括方法和屬性,可以理解為這個類的公有方法和屬性比較oo.
通過分析我們可以看到這裡有個規律,***,***text,***mask,這些東西到底都是幹嘛的?
在我們的textfield類裡邊有這麼乙個字元型別的屬性vtype,在textfield類的初始化**中,有這麼一段
if(this.maskre || (this.vtype && this.disablekeyfilter !== true && (this.maskre = ext.form.vtypes[this.vtype+'mask'])))
這裡我把重要的用黑體字標了出來,我們可以看到,當我們設定了當前物件(textfield)vtype屬性時候,當前物件的maskre屬性獲取了vtypes類的this.vtype+'mask'屬性,看到這裡我們就明白了***mask屬性裡邊的正規表示式是自動賦值給textfield的,這個屬性在textfield控制項keypress事件觸發時候呼叫的,作用是用來限制輸入的字元.
再看下面一段**
if(this.vtype)
}這裡是fieldtext控制項的validatevalue方法裡邊會執行到的**,這段**的作用就是驗證當前控制項輸入的內容是否通過我們剛才定義的***裡邊的驗證邏輯,如果未通過則使用this.arkinvalid方法去執行未通過操作並且返回乙個false.
具體誰呼叫這個validatevalue方法,我們可以去檢視該控制項的父類,或與submit相關的類,這裡只是返回乙個與當前設定的vtype相關的驗證屬性
看到這裡我們也就明白了,剛才上邊定義的***,***text,***mask的作用分別為,驗證邏輯,驗證失敗資訊,控制項輸入驗證.
好了,我們的驗證到這裡就結束了.如果需要更深入的驗證,那麼我們就必須自己去實現一些複雜的邏輯了.
這裡再給大家貼出一些簡單的驗證邏輯
// ip位址驗證
"ip" : function(_v) |1\d\d|2[0-4]\d|25[0-5])\.(\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|1\d\d|2[0-4]\d|25[0-5])$/
.test(_v);
},"iptext" : "該輸入專案必須是ip位址格式,例如:222.192.42.12",
"ipmask" : /[0-9\.]/i,
// 固定**及小靈通
"telephone" : function(_v) \-\d$)|(^\d\-\d$)|(^\d\d$)|(^\d\d$)|(^\d$)/
.test(_v);
},"telephonetext" : "該輸入專案必須是**號碼格式,例如:0513-89500414,051389500414,89500414",
"telephonemask" : /[0-9\-]/i,
// 手機
"mobile" : function(_v) $/.test(_v);
},"mobiletext" : "該輸入專案必須是手機號碼格式,例如:13485135075",
"mobilemask" : /[0-9]/i,
// 身份證
"idcard" : function(_v) ([0-9]|[xx])$)|(^[0-9]$)/.test(_v);
var area =
var y, jym;
var s, m;
var idcard_array = new array();
idcard_array = _v.split("");
// 地區檢驗
if (area[parseint(_v.substr(0, 2))] == null)
// 身份號碼位數及格式檢驗
switch (_v.length) [0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]$/;// 測試出生日期的合法性
} else [0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]$/;// 測試出生日期的合法性
}if (ereg.test(_v))
return true;
else
break;
case 18 :
// 18位身份號碼檢測
// 出生日期的合法性檢查
// 閏年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
// 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if (parseint(_v.substr(6, 4)) % 4 == 0
|| (parseint(_v.substr(6, 4)) % 100 == 0 && parseint(_v
.substr(6, 4))
% 4 == 0)) 19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9][0-9xx]$/;// 閏年出生日期的合法性正規表示式
} else 19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9][0-9xx]$/;// 平年出生日期的合法性正規表示式
}if (ereg.test(_v)) else
} else
break;
default :
this.idcardtext = "身份證號碼位數不對,應該為15位或是18位";
return false;
break;}},
"idcardtext" : "該輸入專案必須是身份證號碼格式,例如:32082919860817201x",
"idcardmask" : /[0-9xx]/i
});
ExtJS中表單驗證使用自定義vtype示例
在extjs中,使用了四種自定義,分別是 alpha alphanum,email url 分別用來驗證表單中的值是否符合字母 字母數字 電子郵件 url等格式。但在實際應用中,我們需要驗證的格式或者規則還是很多的。由於extjs是開源的框架,因此,我們可以擴充套件vtype的功能,實現自定義的vt...
ext的vtype自動驗證
用vtype格式進行簡單的驗證。在此舉郵件驗證的例子,重寫上面 的items配置 items 你可以修改上面的vtype為以下的幾種extjs的vtype預設支援的驗證 form驗證中vtype的預設支援型別 1.alpha 只能輸入字母,無法輸入其他 如數字,特殊符號等 2.alphanum 只能...
Ext自定義事件
在ext中常見的2中自定義事件監聽.1 在gridpanel中行資料中增加自定義的按鈕,圖示的事件操作。例如 如下 注意 action col css processevent function type,view,cell,recordindex,cellindex,e,record,row re...