但是在 MVC 4 WebApi 和 Extjs 中,Controller 可以照原本的方式處理,但是 View 端就必須要使用 Extjs 的驗證了。
以下介紹 Extjs 驗證的設定方法解說:
最大長度
maxLength: 20 // 錯誤訊息 maxLengthText: '最大長度為 20 字元'
最小長度
minLength: 5 // 錯誤訊息 minLengthText: '最小長度為 5 字元'
是否空值
// 允許為空 allowBlank: false // 錯誤訊息 blankText: '此欄必填'
Regex
// regex 驗證 regex: /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ // 錯誤訊息 regexText: '請輸入 IP 格式' // 輸入遮罩,意旨只能輸入以下格式文字在欄位內,其他格式會擋住。 maskRe: /[\d\.]/i
vtype
預設有四個型態:「alpha」( 字母 )、「alphanum」( 字母數字 )、「email」( 電子郵件 )、「url」( 網址 )。
vtype: 'email' // 錯誤訊息 vtypeText: '不符合 Email 格式'
自訂 vtype
自訂一個 vtype 就要使用 Ext.apply 將 Ext.form.field.VTypes 複製出來,加上自訂的驗證,在欄位上使用即可。
參考範本:
Ext.apply(Ext.form.field.VTypes, { XXX: function (v) { return /^ regex pattern $/.test(v); }, // 錯誤訊息 XXXText: 'error message', // 輸入遮罩,意旨只能輸入以下格式文字在欄位內,其他格式會擋住。 XXXMask: / regex pattern /i });
在欄位上使用就加上 vtype: 'XXX' 就可以使用了。
例如:
Ext.apply(Ext.form.field.VTypes, { IPAddress: function (v) { return /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v); }, IPAddressText: '請輸入 IP 格式', IPAddressMask: /[\d\.]/i });
欄位中使用:
vtype: 'IPAddress'
效果其實與 Regex 欄位驗證一樣,但是這種方法可以集中管理、重複使用,比較建議使用這種做法。
更多的 驗證方法 於 「More VTypes!」 可以找到參考。
進階用法:ExtJS中表單應驗使用自定義vtype示例
完整程式碼:
//載入會用到的程式 Ext.require([ 'Ext.form.*', 'Ext.layout.container.Absolute', 'Ext.window.Window', 'Ext.Button' ]); Ext.apply(Ext.form.field.VTypes, { IPAddress: function (v) { return /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(v); }, IPAddressText: '請輸入 IP 格式', IPAddressMask: /[\d\.]/i }); Ext.onReady(function () { //建立 form 框架 var form = Ext.create('Ext.form.Panel', { renderTo: Ext.getBody(), defaultType: 'textfield', border: false, layout: 'form', padding: 10, items: [ { id: 'textfieldId', xtype: 'textfield', fieldLabel: '文字欄位', msgTarget: 'side', name: 'textfield', //最大長度 maxLength: 20, maxLengthText: '最大長度為 20 字元', // 最小長度 minLength: 5, minLengthText: '最小長度為 5 字元', // 允許為空 false allowBlank: false, blankText: '此欄必填', // alpha , alphanum , email , url vtype: 'IPAddress', vtypeText: '不符合 Email 格式', // regex 驗證 regex: /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/, // 錯誤訊息 regexText: '請輸入 IP 格式', // 輸入遮罩,意旨只能輸入以下格式文字在欄位內,其他格式會擋住。 maskRe: /[\d\.]/i } ], buttons: [{ text: 'Send', // button 按下動作 handler: function () { // 檢查form isValid 檢查條件是否符合 this.up('form').getForm().isValid(); } }, { text: 'Cancel' }] }); });
沒有留言 :
張貼留言