需求描述:手机号非必填,但是有输入的时候验证格式。
<el-form ref="form" :rules="rules" :model="form">
<el-form-item label="手机号" prop="mobile">
<el-input v-model="form.mobile" @input="inputMobile" clearable></el-input>
</el-form-item>
</el-form>
let regMobile = /^1\d{10}$/
let validatorMobile = (rule, value, callback) => {
if (!value) {
callback() // 空值通过
} else if (regMobile.test(value)) {
callback()
} else {
callback(new Error('手机号格式错误'))
}
}
form:{
mobile:''
},
rules:{
mobile: [{ validator: validatorMobile,required: false, message: '手机号格式错误',trigger: 'blur' }]
}
输入框为空时候清除掉验证信息
inputMobile(val){
if (!val) {
this.$refs['form'].clearValidate(['mobile'])
}
}
备注:validator和required共存,虽然required为false,但是依然触发验证,说明validator的优先级高,这里的required为false主要目的为隐藏验证的红色星号。
其它思路:本来想的required设置为true,然后隐藏红色星号,正则中判断验证规则,隐藏星号虽然css可以实现但是确实不太地道,想起来有个属性hide-required-asterisk但是是设置在el-form上的,而且这个属性会隐藏所有的星号无法针对某一项设置。
