參考官網:http://element.eleme.io/#/zh-CN/component/formjavascript
Form表單驗證規則的封裝
html
<el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic"> <el-form-item prop="email" label="郵箱" :rules="[ { required: true, message: '請輸入郵箱地址', trigger: 'blur' }, { type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur,change' } ]" > <el-input v-model="dynamicValidateForm.mobil"></el-input> </el-form-item> <el-form-item label="姓名:" prop="name" :rules="[{ required: true, message: '請輸入姓名', trigger: 'blur' }]"> <el-input v-model="dynamicValidateForm.name"></el-input> </el-form-item> <el-form-item label="手機號:" prop="mobil" :rules="filter_rules({required:true,type:'mobile'})"> <el-input v-model="dynamicValidateForm.mobil"></el-input> </el-form-item> </el-form>
全局rules:java
exports.install = function (Vue, options) { Vue.prototype.filter_rules = function (item){ return [{},{}] } }
main.js 註冊 ui
驗證示例代碼:url
import { validateMoneyNumber,qq,mobile,regexn,integer} from '@/utils/validate' exports.install = function (Vue, options) { /** * 注意: 定義type 規則時 不用作非空驗證 * 只須要傳入 required:true 便可 * */ /*保留兩位小數*/ const isvalidateMoney = (rule, value, callback) => { if(value != null && value != "") { if(!validateMoneyNumber(value)) { callback(new Error('請輸入正確的數字,最多保留兩位小數!')) } else { callback() } } else{ callback(); } } /*驗證QQ號碼*/ const isvalidateQQ= (rule, value, callback) => { if(value != null && value != "") { if(!qq(value)) { callback(new Error('您輸入的QQ號不正確!')) } else { callback() } } else{ callback(); } } /*驗證手機號*/ const isvalidateMobile= (rule, value, callback) => { if(value != null && value != "") { if(!mobile(value)) { callback(new Error('您輸入的手機號不正確!')) } else { callback() } } else{ callback(); } } /*含有非法字符(只能輸入字母、漢字)*/ const isvalidateRegexn= (rule, value, callback) => { if(value != null && value != "") { if(!regexn(value)) { callback(new Error('含有非法字符(只能輸入字母、漢字)!')) } else { callback() } } else{ callback(); } } /*請輸入正整數*/ const isvalidateInteger= (rule, value, callback) => { if(value != null && value != "") { if(!integer(value)) { callback(new Error('請輸入正整數!')) } else { callback() } } else{ callback(); } } /** * 參數 item * required true 必填項 * maxLength 字符串的最大長度 * min 和 max 必須同時給 min < max type=number * type 手機號 mobile * 郵箱 email * 網址 url * 各類自定義類型 定義在 src/utils/validate 中 持續添加中....... * */ Vue.prototype.filter_rules = function (item){ let rules = []; if(item.required){ rules.push({ required: true, message: '該輸入項爲必填項!', trigger: 'blur' }); } if(item.maxLength){ rules.push({ min:1,max:item.maxLength, message: '最多輸入'+item.maxLength+'個字符!', trigger: 'blur' }) } if(item.min&&item.max){ rules.push({ min:item.min,max:item.max, message: '字符長度在'+item.min+'至'+item.max+'之間!', trigger: 'blur' }) } if(item.type){ let type = item.type; switch(type) { case 'email': rules.push({ type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur,change' }); break; case 'qq': rules.push( { validator: isvalidateQQ, trigger: 'blur,change' }); break; case 'mobile': rules.push( { validator: isvalidateMobile, trigger: 'blur,change' }); break; case 'regexn': rules.push( { validator: isvalidateRegexn, trigger: 'blur,change' }); break; case 'integer': rules.push( { validator: isvalidateInteger, trigger: 'blur,change' }); break; default: rule.push({}); break; } } return rules; }; };