vue自定义轻量级form表单校验

时间:2022-05-22 16:04:53

遇到了form表单提交的需求,找了vue的组件觉得不够灵活,有时间自己写了一个。

调用方法 全局引入注册:

import va from 'global/js/va'

va.install(Vue);

// 注册一个全局自定义指令 

Vue.directive('va', {})

在每个需要校验的input加上 例如:

 

<div>
                <label>库存:</label>
                <input v-va:stock="[{'NonEmpty':'Money'}]" placeholder="请输入库存(份)" v-model="data.stock" tag="库存"
                       type="number"/>
                <p class="red">{{va.stock.message}}</p>
 </div>

校验类型:v-va:describe="[{'NonEmpty':''}]" 具体错误类型请看下文

tag:错误提示信息描述

p:展示错误信息

data绑定:

va : { stock : {} },

//sub提交时所用到

msg : { describe : '描述' },

data:{ describe:'' }

当点击but提交form是 触发不能为空校验

                var self = this;

                var va = self.va;

                for (var i in va) {

                    if (!va[i].isPass) {

                        Vue.set(self.va[i], 'message', self.msg[i] + '不能为空')
                    }
                }

组件里有一些常用正则:

//常用正则表
var regList = {
    tel     : /^1[34578]\d{9}$/,
    idCard  : /^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/,
    ImgCode : /^[0-9a-zA-Z]{4}$/,
    SmsCode : /^\d{4}$/,
    MailCode: /^\d{4}$/,
    UserName: /^[\w|\d]{4,16}$/,
    Password: /^[\w!@#$%^&*.]{6,16}$/,
    Mobile  : /^1[3|4|5|7|8]\d{9}$/,
    RealName: /^[\u4e00-\u9fa5|·]{2,16}$|^[a-zA-Z|\s]{2,20}$/,
    BankNum : /^\d{10,19}$/,
    Money   : /^([1-9]\d*|[0-9]\d*\.\d{1,2}|0)$/,
    Answer  : /^\S+$/,
    Mail    : /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
}

以及提示字段:

// 获得不同的报错信息
function getErrMsg(vaForm, ruleType, ruleValue) {
    var tag     = vaForm.tag
    var errMsgs = {
        NonEmpty: `${tag}不能为空`,
        reg     : `${tag}格式错误`,
        limit   : `${tag}必须在${ruleValue[0]}与${ruleValue[1]}之间`,
        equal   : `两次${tag}不相同`,
        length  : `${tag}长度必须在${ruleValue[0]}与${ruleValue[1]}之间`,
        unique  : `${tag}不能相同`
    }
    return errMsgs[ruleType]
}

都可以自定义添加

具体调用校验方法 例如:v-va:stock="[{'NonEmpty':'Money'}]" stock 在data中va对象校验字段 数组中是在va.js中的校验方法子段,可重复。优先级左到右。

js下载地址:https://github.com/Runtheantland/vue-form

vue自定义轻量级form表单校验