element-ui自定義表單校驗規則及常用表單校驗
前言
表單校驗是註冊環節中必不可少的操作,表單校驗可以提醒使用者填寫資料規則以確保使用者提交資料的效性,也可以防止使用者因誤操作、填寫錯誤資料或者惡意提交資料而佔用伺服器資源。
ElementUI校驗規則
ElementUI封裝了元件el-form來收集、校驗和提交資料,其中的rules屬性就是用來做資料校驗的。ElementUI提供了一些常用的表單驗證規則,我們可以直接使用該規則來實現資料校驗。rules根據rules給出的規則會對prop中的值進行校驗,當不滿足要求時會彈出message相應的提示資訊。
自定義規則呼叫
ElementUI提供的表單驗證規則是有限的,可能無法滿足我們專案的需求這時候就需要我們來自定義驗證規則。我們在在data() {}中新增自定義的校驗規則,然後在在data的return中通過validator引用校驗規則。data() {return{}}中定義的rules要 中的 :rules 屬性值相同,rules中的物件userName要與與 中的prop屬性值相同。
自定義校驗規則
validate是ElementUI封裝用於對整個表單進行驗證的,引數是一個回撥函式。該回撥函式在校驗結束後被呼叫,是否校驗成功和未通過校驗的欄位。這個回撥函式的原型為:function fun(rule, value, callback, source, options){},其中rule指向當前的規則物件,value是需要進行校驗的值,callback是驗證之後的執行回撥,source是跟value的值一致的鍵值物件(可以忽略),options是個額外的配置選項(可選)。所以常見的函式定義如下,校驗手機號碼是否正確。
validate校驗
自定義校驗方法是一個在校驗結束後才會被呼叫回撥函式,所以在提交表單的時候我們需要通過$refs來呼叫validate來繼續自定義校驗。自定義校驗規則時必須保證每個分支都呼叫了callback方法,否則會導致el-form元件在使用validate方法時無法進入回撥函式。呼叫validate()校驗時需要prop屬性繫結校驗的欄位名,否則無法校驗v-model中繫結的值。
常用校驗規則
為了方便我們還是定義一個validation.js檔案來專門定義常用的校驗方法,然後匯入validation.js進而使用。這裡注意自定義rules時外層的message高於callback中的錯誤提示,所以自定義規則時建議外層勿定義message,可以用兩個規則來校驗內容。定義好之後在需要用到的地方直接 import 引入,然後在 rules 校驗中加入即可。
附上本文用到的原始碼
<template>
<el-form
:model="loginForm"
autocomplete="on"
class="login-form"
:rules="rules"
>
<el-form-item prop="username" label="使用者名稱">
<el-input
placeholder="請輸入使用者名稱"
name="username"
type="text"
v-model="loginForm.username"
autocomplete="on"
/>
</el-form-item>
</el-form>
</template>
<script>
//JavaScript->
rules: { username: [ { required: true, message: '請輸入使用者名稱', trigger: 'blur' },
{ min: 3, max: 5, message: '長度在 3 到 5 個字元', trigger: 'blur' }
]
}
//JavaScript
data(){
const chackLen = (rule, value, callback) => {
let len = value.length
if ( len < 3 || len > 5) {
callback(new Error('使用者名稱長度在3-5之間'))
} else {
callback()
}
}
return{
rules: {
username: [
{ required: true, message: '請輸入使用者名稱', trigger: 'blur' },
{ validator: chackLen, trigger: 'blur' } // 自定義長度校驗
]
} }
methods: {
onSubmit() {
this.$refs['rulesForm'].validate(valid => {
if (valid) {
//如果校驗為真說明符合要求可以繼續
}else{
//反正說明校驗失敗,返回對應的message
}
});
}
}
let matching = (value, callback, reg, message) => {
if (value === '' || value === undefined || value == null){
callback(new Error(message))
} else {
if (!reg.test(value)) {
callback(new Error(message))
} else {
callback()
}
}
}
module.exports = {
Username(rule, value, callback) {
let reg = /^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,12}$/
matching(value, callback, reg, '請輸入6-12位字母和數字組合')
}, SimplePwd(rule, value, callback) {
let reg = /^[_a-zA-Z0-9]+$/
matching(value, callback, reg, '包含英文字母、數字及下劃線組成')
}, ComplexPwd(rule, value, callback) {
let reg = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){8,20}$/
matching(value, callback, reg, '請輸入8-20位英文字母、數字或者符號')
}, Phone(rule, value, callback) {
let reg = /^[1][3, 4, 5, 6, 7, 8][0-9]{9}$/
matching(value, callback, reg, '請輸入正確的手機')
}, Email(rule, value, callback) {
let reg = /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/
matching(value, callback, reg, '輸入正確的郵箱')
}, IdCard(rule, value, callback) { let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
matching(value, callback, reg, '輸入正確的身份證號碼') }, Company(rule, value, callback) {
let reg = /^[A-Z0-9]{8}-[A-Z0-9]$|^[A-Z0-9]{8}-[A-Z0-9]-[0-9]{2}$/
matching(value, callback, reg, '請輸入正確的營業執照')
}, Weixin(rule, value, callback) {
let reg = /^[a-zA-Z][a-zA-Z0-9_-]{5,19}$/
matching(value, callback, reg, '請輸入正確的微訊號')
}, Integer(rule, value, callback) {
let reg = /^[1-9][0-9]*$/
matching(value, callback, reg, '請輸入正確的整數')
}, Number(rule, value, callback) { let reg = /^\d+$|^\d+[.]?\d+$/
matching(value, callback, reg, '請輸入純數字') },
Landline(rule, value, callback) {
let reg = /^(\d{3,4}-)?\d{7,8}$/
matching(value, callback, reg, '請輸入正確的座機')
},
Ip(rule, value, callback) {
let reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
matching(value, callback, reg, '請輸入正確的IP')
},
Price(rule, value, callback) { let reg = /^-?\d{1,4}(?:\.\d{1,2})?$ /
matching(value, callback, reg, '請輸入正確的價格')
},
BankCard(rule, value, callback) {
let reg = /^([1-9]{1})(\d{14}|\d{18})$/
matching(value, callback, reg, '請輸入正確的銀行卡') }
}
相關文章
- 小程式自定義表單校驗
- Vue中form表單常用rules校驗規則VueORM
- Vue Element-ui表單校驗規則,你掌握了哪些?VueUI
- 正整數表單校驗規則
- element-ui 表單校驗 Rules 配置 常用黑科技UI
- Laravel 自定義表單驗證-自定義驗證規則Laravel
- element-ui的----el-form表單校驗巢狀表單校驗(表單多層巢狀)+el-table和el-form巢狀使用表單校驗UIORM巢狀
- Angular8 form 表單對隱藏元素取消表單校驗規則AngularORM
- vue表單校驗方法Vue
- Angular如何在模板驅動表單中自定義校驗器Angular
- 使用jakarta.validation自定義校驗規則
- SpringBoot分組校驗及自定義校驗註解Spring Boot
- 校驗表單如何擺脫 if else ?
- flutter - 登陸介面&表單校驗Flutter
- Layui 自定義表單驗證UI
- element-ui表單校驗:有值卻不透過 el-form validateUIORM
- 前端Vue中常用rules校驗規則前端Vue
- [無心插柳]簡單實現常用的表單校驗函式函式
- js-動態表單校驗-吐血總結最近遇到的變態表單校驗2---element+原生JS
- 織夢DEDECMS自定義表單提示資料校驗不對,程式自動返回
- vue elementUI 表單校驗(多層巢狀)VueUI巢狀
- javascript表單賬戶密碼校驗提交JavaScript密碼
- [React]antd表單校驗函式寫法React函式
- springMVC:校驗框架:多規則校驗,巢狀校驗,分組校驗;ssm整合技術SpringMVC框架巢狀SSM
- 表單驗證自定義格式輸出
- vue 實戰表單驗證規則Vue
- Gin(四):表單提交校驗和模型繫結模型
- vxe-form table 表單使用資料校驗ORM
- SpringBoot自定義校驗註解Spring Boot
- 自定義校驗註解ConstraintValidatorAI
- elementUI 不用在寫rule來作表單校驗啦UI
- Spring MVC 檔案上傳、Restful、表單校驗框架SpringMVCREST框架
- elementUI中form表單的upload上傳圖片及校驗總結UIORM
- iview Form 表單校驗時,必傳符號錯位,校驗無效的某個原因ViewORM符號
- 時間序列的ADF校驗(單位根校驗)
- VeeValidate在vue專案裡表單校驗應用案例Vue
- van-dialog彈窗非同步關閉-校驗表單非同步
- 織夢 DedeCMS 自定義表單出現“資料校驗證不對,程式返回”的解決方案