vue使用rules實現(xiàn)表單字段驗證
vue中表單字段驗證的寫法和方式有多種,本博客介紹三種較為常用的驗證方式。
1. 寫在 data 中驗證
表單內(nèi)容
<!-- 表單 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="用戶名稱:" prop="userName">
<el-input v-model="rulesForm.userName" style="width:300px" maxlength="50"/>
</el-form-item>
</el-form>
- <el-form>:代表這是一個表單
- <el-form> -> ref:表單被引用時的名稱,標(biāo)識
- <el-form> -> rules:表單驗證規(guī)則
- <el-form> -> model:表單數(shù)據(jù)對象
- <el-form> -> label-width:表單域標(biāo)簽的寬度,作為 Form 直接子元素的 form-item 會繼承該值
- <el-form> -> <el-form-item>:表單中的每一項子元素
- <el-form-item> -> label:標(biāo)簽文本
- <el-form-item> -> prop:表單域 model 字段,在使用 validate、resetFields 方法的情況下,該屬性是必填的
- <el-input>:輸入框
- <el-input> -> v-model:綁定的表單數(shù)據(jù)對象屬性
- <el-input> -> style:行內(nèi)樣式
- <el-input> -> maxlength:最大字符長度限制
data 數(shù)據(jù)
data() {
return {
// 省略別的數(shù)據(jù)定義
...
// 表單驗證
formRules: {
userName: [
{required: true,message: "請輸入用戶名稱",trigger: "blur"}
]
}
}
}
- formRules:與上文 '表單內(nèi)容' 中 <el-form> 表單的 :rules 屬性值相同
- userName:與上文 '表單內(nèi)容' 中 <el-form-item> 表單子元素的 prop 屬性值相同
- 驗證內(nèi)容是:必填,失去焦點時驗證,如果為空,提示信息為 '請輸入用戶名稱'
2. 寫在行內(nèi)
表單內(nèi)容
<!-- 表單 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="銀行名稱:" prop="accountName" :rules="[{required:true,message:'請輸入銀行名稱',trigger:'blur'}]">
<el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/>
</el-form-item>
</el-form>
- <el-form-item> -> rules:和第一種方式表現(xiàn)的效果一致,只是寫法不一樣,這里不再贅述
data 數(shù)據(jù)沒有內(nèi)容
3. 引入外部定義的規(guī)則
表單內(nèi)容
<!-- 表單 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="銀行卡號:" prop="accountNumber">
<el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="19"/>
</el-form-item>
</el-form>
表單內(nèi)容與第一種方式寫法一致,這里不再贅述
script 內(nèi)容
<script>
// 引入了外部的驗證規(guī)則
import { validateAccountNumber } from "@/utils/validate";
// 判斷銀行卡賬戶是否正確
const validatorAccountNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error("請輸入賬戶信息"));
} else {
if (validateAccountNumber(value)) {
callback();
} else {
return callback(new Error('賬號格式不正確'))
}
}
};
export default {
data() {
return {
// 省略別的數(shù)據(jù)定義
...
// 表單驗證
formRules: {
accountNumber: [
{required: true,validator: validatorAccountNumber,trigger: "blur"}
]
}
}
}
}
</script>
- import:先引入了外部的驗證規(guī)則
- const:定義一個規(guī)則常量,常量名可變, '= (rule, value, callback) => {}' 為固定格式,value 入?yún)轵炞C的字段值
- formRules -> accountNumber:表單驗證中使用 validator 指定自定義校驗規(guī)則常量名稱
validate.js
/* 銀行賬戶 */
export function validateAccountNumber(str) {
const reg = /^([1-9]{1})(\d{14}|\d{18})$/
return reg.test(str)
}
- 驗證規(guī)則
以上都是在失去焦點時的驗證,下面來分析一下如何在表單提交時驗證
1. 表單的提交按鈕
<!-- 表單 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item>
<el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
<el-button @click="cancel">取消</el-button>
</el-form-item>
</el-form>
- <el-button>:按鈕
- <el-button> -> type:按鈕類型
- <el-button> -> @click:按鈕點擊時觸發(fā)的事件,這里注意方法的入?yún)?'rulesForm',這里要與 <el-form> 表單的 rel 屬性值一致
2. methods 方法
methods: {
// 保存
onSubmit(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
console.log("success submit!!");
}else{
console.log("error submit!!");
}
});
},
// 取消
cancel() {
}
}
this.$refs[formName].validate:formName 就是傳入的 'rulesForm',與 <el-form> 表單的 rel 屬性值一致,這樣就指定好需要驗證的表單了
完整示例代碼如下
1. rules.vue
<template>
<div class="app-container">
<el-tabs v-model="activeName">
<el-tab-pane label="表單" name="rulesPane" @tab-click="handleClick">
<!-- 表單 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="用戶名稱:" prop="userName">
<el-input v-model="rulesForm.userName" style="width:300px" maxlength="50"/>
</el-form-item>
<el-form-item label="銀行名稱:" prop="accountName" :rules="[{required:true,message:'請輸入銀行名稱',trigger:'blur'}]">
<el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/>
</el-form-item>
<el-form-item label="銀行卡號:" prop="accountNumber">
<el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="50"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
<el-button @click="cancel">取消</el-button>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { validateAccountNumber } from "@/utils/validate";
// 判斷銀行卡賬戶是否正確
const validatorAccountNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error("請輸入賬戶信息"));
} else {
if (validateAccountNumber(value)) {
callback();
} else {
return callback(new Error('賬號格式不正確'))
}
}
};
export default {
name: "rules",
data() {
return {
activeName: "rulesPane",
defaultProps: {
children: "children",
label: "label"
},
rulesForm: {
},
// 表單驗證
formRules: {
userName: [
{
required: true,
message: "請輸入用戶名稱",
trigger: "blur"
}
],
accountNumber: [
{
required: true,
validator: validatorAccountNumber,
trigger: "blur"
}
],
}
};
},
created() {},
mounted() {},
methods: {
handleClick(tab) {
},
// 取消
cancel() {
},
// 保存
onSubmit(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
console.log("success submit!!");
} else {
console.log("error submit!!");
return false;
}
});
}
}
};
</script>
<style lang="scss">
</style>
2. validate.js
/* 銀行賬戶 */
export function validateAccountNumber(str) {
const reg = /^([1-9]{1})(\d{14}|\d{18})$/
return reg.test(str)
}
效果圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3?+?Ant?Design?實現(xiàn)雙表頭表格的效果(橫向表頭+縱向表頭)
這篇文章主要介紹了vue3?+?Ant?Design?實現(xiàn)雙表頭表格(橫向表頭+縱向表頭),需要的朋友可以參考下2023-12-12
vue form表單post請求結(jié)合Servlet實現(xiàn)文件上傳功能
這篇文章主要介紹了vue form表單post請求結(jié)合Servlet實現(xiàn)文件上傳功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Vue中通過vue-router實現(xiàn)命名視圖的問題
這篇文章主要介紹了在Vue中通過vue-router實現(xiàn)命名視圖,本文給大家提到了vue-router的原理解析,給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
vue自定義指令實現(xiàn)元素滑動移動端適配及邊界處理
這篇文章主要為大家介紹了vue自定義指令實現(xiàn)元素滑動移動端適配及邊界處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
vue3+elementui-plus實現(xiàn)一個接口上傳多個文件功能
這篇文章主要介紹了vue3+elementui-plus實現(xiàn)一個接口上傳多個文件,先使用element-plus寫好上傳組件,然后假設(shè)有個提交按鈕,點擊上傳文件請求接口,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
Vue源碼解析之?dāng)?shù)組變異的實現(xiàn)
這篇文章主要介紹了Vue源碼解析之?dāng)?shù)組變異的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
詳解Vue 2中的? initState 狀態(tài)初始化
這篇文章主要介紹了詳解Vue 2中的initState狀態(tài)初始化,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
關(guān)于vue3.0中的this.$router.replace({ path: ''/''})刷新無效果問題
這篇文章主要介紹了關(guān)于vue3.0中的this.$router.replace({ path: '/'})刷新無效果問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

