在開發中驗證表單欄位是一件前後端都必須處理的事情,不僅前端要驗證使用者輸入的欄位資訊,後端也要驗證送往伺服器的資料。
而前端的驗證如果要自己寫,會牽扯到正則,而且也會容易掛一漏萬,所以如果要在 Vue 裡面進行表單驗證,通常會引用套件,但是並不是所有的套件都支援中文語系。
Vee-Validate 是目前比較完整而且支援繁體中文語系的驗證套件。雖然說是套件,如果你去看 Vee-Validate 的官網,保證看完了,還是一頭霧水。所以我整理了 Vee-Validate 的使用方法,以防自己下次要用又失憶了。
Vee-Validate 官網:https://vee-validate.logaretm.com/v4/
因為目前我所使用的是 Vue 3 的版本,所以要搭配 Vee-Validate 4.0 以上版本,在安裝的時候要注意版本相匹配的問題。
安裝 Vee-Validate
安裝時除了 Vee-Validate 主程式之外,還要安裝驗證規則(rules)及多國語系(i18n)。
只要在 main.js 中設定,多國語系(i18n)就會把驗證的錯誤訊息轉成繁體中文。
例如: “email”: “{field} 須為有效的電子信箱”, {field} 的部分會填入對應的欄位名稱。
繁體中文驗證顯示內容。
main.js 設定
在 main.js 中引入套件之外,同時把相關的規則及元件做全域註冊,就不用在每個需要做驗證的 vue 檔案中一一匯入。
也可以使用這種方法把全部的規則都引入,就不用像上面一樣一一定義驗證規則。
表單欄位的設定
表單的頭尾要用大寫 F 開頭的 <Form>
包住, v-slot=”{ errors }”
則對應到錯誤訊息欄位。
原本的 <input>
Z標籤用 標籤取代, 其中 name
會對應到 的 name
,如果欄位輸入錯誤,以 email 欄位為例,就會出現:「email 為必填」。
rules="email|required"
則會去抓 main.js 中定義的表單規則。
:class="{ 'is-invalid': errors['email'] }"
輸入驗證錯誤則會綁定 Bootstrap 中 is-invalid 樣式,讓輸入框的 border 變成紅色的。
<button>
的 disabled
有綁訂到 Vee-Validate 的 errors
物件,如果陣列長度大於 0,按鈕就不能按。
Script 中的設定
表單的 v-model
有綁訂到 data 的 form 物件。 button 綁定的 submitOrders 方法是打 API 把訂單送去後端。
其中手機號碼的驗證規則,也寫在 methods 裡面:
久久寫一次驗證,發覺自己有點失意,寫個筆記,希望下次可以不用花那麼久的時間重新探索。
參考: