vue之el-form表單校驗(yàn)以及常用正則詳解
el-form表單校驗(yàn)以及常用正則
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
? <el-form-item label="表單字段" prop="str">
? ? <el-input v-model="ruleForm.str"></el-input>
? </el-form-item>
? <el-form-item>
? ? <el-button type="primary" @click="submitForm('ruleForm')">立即創(chuàng)建</el-button>
? ? <el-button @click="resetForm('ruleForm')">重置</el-button>
? </el-form-item>
</el-form>
<script>
? export default {
? ? data() {
? ? ? const checkFinanceCode = (rule, value, callback) => {
? ? ? ? if (value) {
? ? ? ? ? var reg = /^[A-Za-z0-9_]+$/
? ? ? ? ? if (reg.test(value) === false) {
? ? ? ? ? ? callback(new Error('只可輸入英文數(shù)字和下劃線'))
? ? ? ? ? } else {
? ? ? ? ? ? callback()
? ? ? ? ? }
? ? ? ? } else {
? ? ? ? ? callback()
? ? ? ? }
? ? ? }
? ? ? return {
? ? ? ? ruleForm: {
? ? ? ? ? str: '',
? ? ? ? },
? ? ? ? rules: {
? ? ? ? ? str: [
? ? ? ? ? ? { required: true, message: '請輸入活動(dòng)名稱', trigger: 'blur' }, // 限制必填
? ? ? ? ? ? { min: 3, max: 5, message: '長度在 3 到 5 個(gè)字符', trigger: 'blur' }, // 限制字符串長度
? ? ? ? ? ? { required: true, trigger: 'blur', validator: checkFinanceCode } // 自定義正則
? ? ? ? ? ]
? ? ? ? }
? ? ? };
? ? },
? ? methods: {
? ? ? submitForm(formName) {
? ? ? ? this.$refs[formName].validate((valid) => {
? ? ? ? ? if (valid) {
? ? ? ? ? ? alert('submit!');
? ? ? ? ? } else {
? ? ? ? ? ? console.log('error submit!!');
? ? ? ? ? ? return false;
? ? ? ? ? }
? ? ? ? });
? ? ? },
? ? ? resetForm(formName) {
? ? ? ? this.$refs[formName].resetFields();
? ? ? }
? ? }
? }
</script>下面記錄一下常用正則,大家發(fā)現(xiàn)錯(cuò)誤,或者有更好的評論區(qū)提出來,我一并添加修改,方便大家下次直接用
// 數(shù)字類型
數(shù)字:/^[0-9]*$/
n位的數(shù)字:/^\d{n}$/
至少n位的數(shù)字:/^\d{n,}$/
m-n位的數(shù)字:/^\d{m,n}$/
價(jià)格:/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
零和非零開頭的數(shù)字:/^(0|[1-9][0-9]*)$/
非零開頭的最多帶兩位小數(shù)的數(shù)字:/^([1-9][0-9]*)+(\.[0-9]{1,2})?$/
帶1-2位小數(shù)的正數(shù)或負(fù)數(shù):/^(\-)?\d+(\.\d{1,2})$/
正數(shù)、負(fù)數(shù)、和小數(shù):/^(\-|\+)?\d+(\.\d+)?$/
有兩位小數(shù)的正實(shí)數(shù):/^[0-9]+(\.[0-9]{2})?$/
有1~3位小數(shù)的正實(shí)數(shù):/^[0-9]+(\.[0-9]{1,3})?$/
非零的正整數(shù):/^[1-9]\d*$/ 或 /^([1-9][0-9]*){1,3}$/ 或 /^\+?[1-9][0-9]*$/
非零的負(fù)整數(shù):/^\-[1-9][]0-9"*$/ 或 /^-[1-9]\d*$/
非負(fù)整數(shù):/^\d+$/ 或 /^[1-9]\d*|0$/
非正整數(shù):/^-[1-9]\d*|0$/ 或 /^((-\d+)|(0+))$/
非負(fù)浮點(diǎn)數(shù):/^\d+(\.\d+)?$/ 或 /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/
非正浮點(diǎn)數(shù):/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/ 或 /^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$/
正浮點(diǎn)數(shù):/^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/ 或 /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/
負(fù)浮點(diǎn)數(shù):/^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/ 或 /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
浮點(diǎn)數(shù):/^(-?\d+)(\.\d+)?$/ 或 /^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$/
// 其他特殊校驗(yàn)
4~20位英文+數(shù)字: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{4,20}$/
大寫英文: /^[A-Z]+$/
郵箱: /^[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+)$/ 或 /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
手機(jī): /^1[3456789]\d{9}$/ 或 /^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/
只能漢字: /^[\u4e00-\u9fa5]{0,}$/
電話號(hào)碼: ("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):/^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$/
強(qiáng)密碼(必須包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長度在 8-10 之間):/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$/
強(qiáng)密碼(必須包含大小寫字母和數(shù)字的組合,可以使用特殊字符,長度在8-10之間):/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$/el-form前端表單校驗(yàn)步驟
(1),F(xiàn)orm組件提供了表單驗(yàn)證的功能,只需要通過rules屬性傳入約定的驗(yàn)證規(guī)則,并將Form-Item的prop屬性設(shè)置為需校驗(yàn)的字段名即可。
<el-form :model="formData" :rules="rules" ref="form"> ? ? <el-form-item label="活動(dòng)名稱" prop="name"> ? ? ? ? <el-input v-model="formData.name" /> ? ? </el-form-item> </el-form> <el-button @click="submit">提交</el-button>
(2),data->return里面加上formData,在這里寫上限定條件,通過rules屬性傳入約定的驗(yàn)證規(guī)則
<script>
? ? export default {
? ? ? ? return {
? ? ? ? ? ? name:''
? ? ? ? },
? ? ? ? const nameValidator = (rule,value,callback)=>{ 校驗(yàn)內(nèi)容 },
? ? ? ? rules:{
? ? ? ? ? ? name:[
? ? ? ? ? ? ? ? { required: true(不填的時(shí)候提示不能為空), message: '請輸入活動(dòng)名稱', trigger: 'blur'(失去焦點(diǎn)的時(shí)候觸發(fā)) },
? ? ? ? ? ? ? ? // 第一條驗(yàn)證復(fù)合要求時(shí),才會(huì)執(zhí)行第二條
? ? ? ? ? ? ? ? { min: 3, max: 5, message: '長度在 3 到 5 個(gè)字符', trigger: 'blur' },
? ? ? ? ? ? ? ? // 第二條驗(yàn)證復(fù)合要求時(shí),才會(huì)執(zhí)行第三條
? ? ? ? ? ? ? ? { validator: nameValidator(限定條件), trigger:'blur' }
? ? ? ? ? ? ]
? ? ? ? }
? ? }
</script>(3),提交驗(yàn)證
methods:{
? ? submit(){
? ? ? ? this.$refs.form.validate(pass => {
? ? ? ? ? ? if(!pass) return;
? ? ? ? ? ? 需要執(zhí)行的代碼
? ? ? ? })
? ? }
}例子
// 如果設(shè)備名稱是鉛筆,設(shè)備分類就為行政辦公設(shè)備
<template>
? ? <el-form :model="formData" :rules="rules" ref="form">
? ? ? ? <el-form-item label="活動(dòng)名稱" prop="name">
? ? ? ? ? ? <el-input v-model="formData.name" />
? ? ? ? </el-form-item>
? ? ? ? <el-form-item label="設(shè)備分類" prop="category">
? ? ? ? ? ? <el-select v-model="formData.category" placeholder="請選擇">
? ? ? ? ? ? ? ? <el-option v-for="d in $store.state.categoryList" :key="d.id" :label="d.name" :value="d.id" ></el-option>
? ? ? ? ? ? </el-select>
? ? ? ? </el-form-item>
? ? </el-form>
? ? <el-button type="primary" @click="submit">提交</el-button>
</template>
<script>
? ? export default {
? ? ? ? data(){
? ? ? ? ? ? // 獲取的數(shù)據(jù)是從vuex中獲取的
? ? ? ? ? ? const nameValidator = (rule,value,callback)=>{
? ? ? ? ? ? ? ? // 只判斷鉛筆是辦公用品,只是例子
? ? ? ? ? ? ? ? const { category } = this.formData;
? ? ? ? ? ? ? ? const cName = this.$store.getters.categoryObj[category].name;
? ? ? ? ? ? ? ? if(value === '鉛筆' && category && category !== 'CATE9'){
? ? ? ? ? ? ? ? ? ? callback(new Error(`鉛筆不屬于${cName}`))
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? callback();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? },
? ? ? ? ? ? const categoryValidator = (rule,value,callback) => {
? ? ? ? ? ? ? ? // 調(diào)用別的表單項(xiàng)的校驗(yàn)
? ? ? ? ? ? ? ? this.$refs.form.validateField('name');
? ? ? ? ? ? ? ? callback();
? ? ? ? ? ? },
? ? ? ? ? ? return {
? ? ? ? ? ? ? ? formData:{
? ? ? ? ? ? ? ? ? ? name:'',
? ? ? ? ? ? ? ? }
? ? ? ? ? ? },
? ? ? ? ? ? rules:{
? ? ? ? ? ? ? ? name:[
? ? ? ? ? ? ? ? ? ? { required: true, message: '請輸入設(shè)備名稱', trigger: 'blur' },
? ? ? ? ? ? ? ? ? ? { validator: nameValidator, trigger:'blur' }
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? category:[
? ? ? ? ? ? ? ? ? ? { required: true, message: '請選擇設(shè)備分類', trigger: 'change' },
? ? ? ? ? ? ? ? ? ? { validator: categoryValidator, trigger:'change' }
? ? ? ? ? ? ? ? ]
? ? ? ? ? ? }
? ? ? ? },
? ? ? ? methods:{
? ? ? ? ? ? submit(){
? ? ? ? ? ? ? ? this.$refs.form.validate(pass => {
? ? ? ? ? ? ? ? ? ? if(!pass) return;
? ? ? ? ? ? ? ? ? ? this.submiting=true;
? ? ? ? ? ? ? ? ? ? axios.post('/pre-edit',this.formData).then(res =>{
? ? ? ? ? ? ? ? ? ? ? ? this.submiting=false;
? ? ? ? ? ? ? ? ? ? ? ? if(!res.code){
? ? ? ? ? ? ? ? ? ? ? ? ? ? this.$message.success('編輯成功');
? ? ? ? ? ? ? ? ? ? ? ? ? ? this.$router.back();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? })
? ? ? ? ? ? }
? ? ? ? }
? ? }
</script>總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- el-form實(shí)現(xiàn)表單和圖片手動(dòng)上傳和校驗(yàn)功能
- vue實(shí)現(xiàn)多個(gè)el-form表單提交統(tǒng)一校驗(yàn)的2個(gè)方法
- elementUI動(dòng)態(tài)嵌套el-form表單校驗(yàn)舉例詳解
- 使用el-form之表單校驗(yàn)自動(dòng)定位到報(bào)錯(cuò)位置問題
- vue中的el-form表單rule校驗(yàn)問題(特殊字符、中文、數(shù)字等)
- el-form的model、prop屬性和表單校驗(yàn)等使用
- v-for中動(dòng)態(tài)校驗(yàn)el-form表單項(xiàng)的實(shí)踐
- el-form表單實(shí)現(xiàn)校驗(yàn)的示例代碼
相關(guān)文章
如何使用Vue3構(gòu)建一個(gè)圖像畫廊(支持圖片上傳)
這篇文章主要給大家介紹了關(guān)于如何使用Vue3構(gòu)建一個(gè)圖像畫廊(支持圖片上傳)的相關(guān)資料,Vue畫廊這是vue編寫的圖庫應(yīng)用程序,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
淺談vue同一頁面中擁有兩個(gè)表單時(shí),的驗(yàn)證問題
今天小編就為大家分享一篇淺談vue同一頁面中擁有兩個(gè)表單時(shí),的驗(yàn)證問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09

