需求:输入超过规定长度error提醒,并实时显示输入长度,可无限输入
步骤:
我的项目中使用校验比较多,所以进行简单的封装:
新建js文件写入下面的函数
export function valieTextLength(rule, value, callback) {
if (!value) {
callback()
return
}
const field = rule.field
const textLengthRules = {
name: 120,
code: 60,
accountPeriod: 20,
bankName: 60,
bankAccount: 19,
taxId: 20,
contacts: 60,
address: 160,
remark: 200,
tepName: 80 // 权限模板名称
}
if (textLengthRules[field] && value.length > textLengthRules[field]) {
callback(new Error(`${value.length}/${textLengthRules[field]} 内容输入超出范围`))
return
}
callback()
}
需要校验的组件引用使用:
import { valieTextLength } from '@/utils/validate'
data中定义:
data() {
const valied = (rule, value, callback) => { valieTextLength(rule, value, callback) }
return {
rules: {
name: [ //这里做了三种校验
{ required: true, message: '请输入客户名称', trigger: 'blur' },
{
pattern: /^[\u4e00-\u9fa5_a-zA-Z0-9.·-]+$/,
message: '不支持特殊字符',
trigger: 'blur'
},
{ validator: valied }
]
}
}
}
form表单中prop要和rules中定义校验名一致:
<el-form
ref="form"
class="customer-form"
:model="form"
label-width="85px"
:inline="true"
:rules="rules"
label-suffix=":"
>
<el-form-item label="客户名称" prop="name" class="form-style">
<el-input v-model.trim="form.name" placeholder="请输入" size="small" class="input-style" />
</el-form-item>
</el-form>
看效果:
可以看到我们自定义name长度为120,当用户输入超过120会出现error提示,并实时显示用户输入的字符长度,可以无限输入但是无法通过校验。