Ext自定義vtype動態驗證

2021-09-01 04:21:44 字數 4263 閱讀 1327

本文**:

近日來對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...