element 表单验证的三种方式

目录

第一种常用方式:表单上加rules{object}

第二种方式:在el-form-item单个添加

第三种方式:动态增减表单项


第一种常用方式:表单上加rules{object}

<el-form class="apply-form first-form" :model="formData" :rules="rule" ref="form">
    <el-form-item label="姓名" prop="visitorName">
        <el-input v-model="formData.visitorName" placeholder="请输入姓名" clearable></el-input>
    </el-form-item>
    <el-form-item label="身份证号" prop="cardCode">
       <el-input v-model="formData.cardCode" :maxlength="18" placeholder="请输入身份证号" clearable></el-input>
    </el-form-item>
</el-form>

这种方式需要在data()中写入rule{},对于需要校验字段prop中的如visitorName写上验证规则,如下:

data() {
   return {
       formData: {
           visitorName: '',
           cardType: 1,
           cardCode: ''
       },
       rule: {
           visitorName: [
               { required: true, message: '请输入姓名', trigger: 'blur' },
               { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' },
               {
                        required: true,
                        pattern: /^[\u4e00-\u9fa5_a-zA-Z0-9.·-]+$/,
                        message: '姓名不支持特殊字符',
                        trigger: 'blur'
               }
          ],
          cardCode: [
              { required: true, message: '请输入身份证号', trigger: 'blur' },
              { min: 15, max: 18, message: '请如实填写18位号码,以供学校保卫科核对', trigger: 'blur' },
              {
                   required: true,
                   pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
                   message: '请输入正确的身份证号码',
                   trigger: 'blur'
              }
          ]
      }
   }
}

其中对于有些需要自定义的校验规则可以作为变量写在data中:

data() {
    let reg = /(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{6,12}$/
    var validateNewPwd = (rule, value, callback) => {
        if (!reg.test(value)) {
            callback(new Error('密码应是6-12位数字、字母或字符!'))
        } else if (this.form.oldPasswd === value) {
            callback(new Error('新密码与旧密码不可一致!'))
        } else {
            callback()
        }
    }
    var validateComfirmPwd = (rule, value, callback) => {
        if (!reg.test(value)) {
            callback(new Error('密码应是6-12位数字、字母或字符!'))
        } else if (this.form.newPasswd !== value) {
            callback(new Error('确认密码与新密码不一致!'))
        } else {
            callback()
        }
    }
    return {
        form: {
            newPasswd: '',
            comfirmPwd: ''
        },
        rules: {
            newPasswd: [
                { required: true, message: '请输入新密码', trigger: 'blur' },
                { validator: validateNewPwd, trigger: 'blur' }
            ],
            comfirmPwd: [
                { required: true, message: '请输入确认密码', trigger: 'blur' },
                { validator: validateComfirmPwd, trigger: 'blur' }
            ]
        }
    }
}

比较适用于表单全部字段校验或需要校验字段类型比较简单的数据类型

第二种方式:在el-form-item单个添加

<el-form-item label="电话号码" class="el-form-item--small has-error" :prop="phoneNum" :rules="[{ required: true, message: '请输入电话号码', trigger: 'blur' }, { required: true, pattern: /^((13|14|15|16|17|18)[0-9]{1}\d{8})|((166|199|198)[0-9]{1}\d{7})$/, message: '请输入正确的电话号码', trigger: 'blur' }]">
    <el-input v-model="v.phoneNum" :maxlength="11" placeholder clearable></el-input>
</el-form-item>

这种方式适用于需要个别检验的字段,或者表单字段有变动的校验;

第三种方式:动态增减表单项

先看需求效果图
图片描述
对应的数据结构:
图片描述
对应删除增加表单项的操作为:

addPhone() {
    let len = this.formData.phoneInfoList.length
    this.$set(this.formData.phoneInfoList, len, {
        relation: [],
        phoneNum: '',
        relationType: 0,
        schoolId: this.selectedUser.schoolId,
        userCode: this.selectedUser.userCode
    })
},
deletePhone(item) {
    if (this.formData.phoneInfoList.length > 1) {
        // 表示先获取这个元素的下标,然后从这个下标开始计算,删除长度为1的元素
        this.formData.phoneInfoList.splice(this.formData.phoneInfoList.indexOf(item), 1);
    } else {
        this.$vux.toast.text('至少保留一个家长亲情号码!')
        return false
    }
},

这样的rule、prop直接写就对应不上表单mode绑定的对象上的属性,所以在此要用循环的方式找到要校验的字段所在数据中的索引,然后再以字符串拼接的方式连上校验字段名称:
图片描述
渲染出来的html为:
图片描述

转自:https://segmentfault.com/a/1190000020410128

有问题欢迎来微信找我!一起学习成长,交个朋友!^_^

微信搜索:acoolgiser,或者直接扫描

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue Element表单验证是什么? Vue Element表单验证是一种基于Vue.js和Element组件库的表单验证方式,通过使用Vue提供的数据驱动的方式,实现实时检测表单输入数据的合法性,并在输入无效时提示错误信息。Vue Element表单验证能够有效地防止用户输入不合法数据,提高应用程序的数据质量。 Vue Element表单验证的特点: 1. 数据驱动:Vue利用双向绑定机制,保证了错误信息和表单输入数据的实时更新。 2. 灵活:可以选择自定义验证规则或使用Element库提供的验证方法。 3. 原子性:每个表单项的验证都是独立的,互不干扰。 4. 可扩展:可以通过自定义指令和插件来扩展验证功能。 Vue Element表单验证的实现方式: 1. 在模板中使用el-form组件包裹表单项,通过设置rules属性指定验证规则。 2. 在data中定义表单数据,通过v-model指令绑定输入框值。 3. 在methods中定义提交表单方法,通过this.$refs.form.validate()方法进行表单验证。 4. 根据验证结果来决定是否提交表单数据。 Vue Element表单验证的基本规则: 1. required:必填项。 2. min/max:最小值/最大值。 3. pattern:正则表达式。 4. validator:自定义验证函数。 需要注意的是,使用Element表单验证规则时,需要在el-form-item组件中使用prop属性指定绑定的数据项。 Vue Element表单验证的优缺点: 优点: 1. 数据和视图之间绑定紧密,实时更新错误信息和表单数据。 2. 可以选择自定义验证规则或使用Element提供的验证类,具有灵活性。 3. 可以有效预防用户输入不合法数据,提高数据质量。 4. 可扩展性强,可以通过自定义指令和插件来扩展验证功能。 缺点: 1. 对于复杂的表单结构,需要编写大量的验证规则。 2. 使用Element库自带的验证规则时,需要掌握Element库的使用方法。 3. 自定义验证规则时需要了解正则表达式的使用,对于一些开发者来说可能存在一定的难度。 总结: Vue Element表单验证是一种非常方便使用的表单验证方式,能够有效地预防用户输入不合法数据,提高应用程序的数据质量。同时,Vue Element表单验证也具有灵活性和可扩展性,可以根据具体业务需求自定义验证规则或使用Element提供的验证类,实现更加精细的验证效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值