vue+element-ui form validation package public method file

When we write the form submission verification, because many pages need regular inspection, this leads to writing a lot of repeated code, which is very inconvenient

So all the rules can be extracted and made public files. Hanging on the prototype of Vue, the code is as follows:

Create a new formCheck.js under the utils folder

// 手机号码验证
const validatePhone = (rule, value, callback) => {
    
    
    const patter = new RegExp('^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$')
    if (!patter.test(value)) {
    
    
        return callback(new Error('请输入正确格式的手机号!'))
    } else {
    
    
        callback() // 必须有此项回调,否则验证会一直不通过
    }
}
// 邮箱的正则
const validateEmail = (rule, value, callback) => {
    
    
    const mailbox = new RegExp('^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$')
    if (!mailbox.test(value)) {
    
    
        return callback(new Error('请输入正确格式的邮箱!'))
    } else {
    
    
        callback()
    }
}
// 身份证号
const validateIdCardNo = (rule, value, callback) => {
    
    
    const mailbox = new RegExp('^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$')
    if (!mailbox.test(value)) {
    
    
        return callback(new Error('请输入正确格式的身份证号!'))
    } else {
    
    
        callback()
    }
}

// 身高
const height = (rule, value, callback) => {
    
    
    if (!value) {
    
    
        return callback(new Error("请输入身高"));
    }
    const mailbox = new RegExp(/^\+?[1-9]{1}[0-9]{0,2}\d{0,0}$/)
    if (!mailbox.test(value)) {
    
    
        return callback(new Error('请输入1~999内整数'))
    } else {
    
    
        callback()
    }
}

// 体重
const weight = (rule, value, callback) => {
    
    
    if (!value) {
    
    
        return callback(new Error("请输入体重"));
    }
    const mailbox = new RegExp(/^(?:0\.(?:[1-9]{1,1}|0[1-9])|[1-9]\d{0,2}(?:\.[0-9]{1,1}|\.0[1-9])?|999.9)$/)
    if (!mailbox.test(value)) {
    
    
        return callback(new Error('请输入0.1~999.9内整数或一位小数'))
    } else {
    
    
        callback()
    }
}

// 驻地海拔
const checkseaLeave = (rule, value, callback) => {
    
    
    if (!value) {
    
    
        return callback(new Error("请输入海拔"));
    }
    if (Number(value) <= 4000) {
    
    
        const regexp = /^-?[1-9]\d*$|^0$/;
        if (!regexp.test(Number(value))) {
    
    
            return callback(new Error("请输入不大于4000的整数"));
        } else {
    
    
            callback();
        }
    } else {
    
    
        return callback(new Error("请输入不大于4000的整数"));
    }

};


export default {
    
    
    // demo 仅供参考
    common: {
    
    
        phone: [{
    
    
            required: true,
            message: '手机号不能为空'
        }, {
    
    
            validator: validatePhone,
            trigger: 'blur'
        }],
        email: [{
    
    
            required: true,
            message: '邮箱不能为空'
        },
        {
    
    
            validator: validateEmail,
            trigger: 'blur'
        }
        ],
        idCardNo: [{
    
    
            required: true,
            message: '身份证号码不能为空'
        },
        {
    
    
            validator: validateIdCardNo,
            trigger: 'blur'
        }
        ]
    },
    // 通用课目-有伤病人员
    haveInjuries: {
    
    
        birthday: [
            {
    
     required: true, message: "请输入出生日期", trigger: "blur" },
        ],
        // 体型
        height: [
            {
    
    
                validator: height,
                required: true,
                trigger: "blur",
            },
        ],
        weight: [
            {
    
    
                validator: weight,
                required: true,
                trigger: "blur",
            },
        ],
        seaLeave: [
            {
    
    
                validator: checkseaLeave,
                required: true,
                trigger: "blur",
            },
        ],
    },
    //通用课目-无伤病人员
    injuries: {
    
    
        birthday: [
            {
    
     required: true,
             message: "请输入出生日期",
              trigger: "blur" },
        ],
        // 体型
        height: [
            {
    
    
                validator: height,
                required: true,
                trigger: "blur",
            },
        ],
        weight: [
            {
    
    
                validator: weight,
                required: true,
                trigger: "blur",
            },
        ],
        sealevel: [
            {
    
    
                validator: checkseaLeave,
                required: true,
                trigger: "blur",
            },
        ],
    },
}

After adding the file in this way, it is divided into two main parts:

  1. const defines various regular inspection rules (mobile phone number, email, etc.)
  2. export default {common: {}, aaa: {}} The second step is to export a large object, which contains various verification rules corresponding to the page.

The second step is to mount the main.js file to the prototype

import rules from '@/utils/formCheck.js'
// 全局方法正则挂载
Vue.prototype.$rules = rules

The last step, start referencing on the page

Add el-form form tag: :rules="$rules.six"

You can also use el-form-item alone: ​​:rules="$rules.haveInjuries.weight"

     <el-form 
     :model="ruleForm" 
     :rules="$rules.haveInjuries"
      ref="ruleForm" 
      label-width="100px" >
     ..................................
          <el-form-item label="身高:" prop="height">
          <el-input v-model="ruleForm.height" placeholder="请输入" size="mini"><span slot="suffix">CM
            </span></el-input>
        </el-form-item>
...................................
      </el-form>

Note: When I define variables in const, I don’t like uppercase definitions very much. The readability of the code is poor, and there is no lowercase to look comfortable...

over

Very convenient~

clean and hygienic~

Guess you like

Origin blog.csdn.net/qq_38594056/article/details/119929948