前端工作小结66-表单校验规则

简介: 前端工作小结66-表单校验规则

第一种常用方式:表单上加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' }
                 ]
             }
         }
     }


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

image.png

第二种方式:在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>


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

image.png

第三种方式:动态增减表单项先看需求效果图

图片描述

对应的数据结构:

image.png

对应删除增加表单项的操作为:

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为:

image.png

相关文章
|
1月前
|
前端开发
Web前端---表格和表单
Web前端---表格和表单
38 1
|
1月前
|
前端开发 小程序
前端解析支付宝返回form表单,自动跳转支付
前端解析支付宝返回form表单,自动跳转支付
157 1
|
8月前
|
JavaScript 前端开发
前端基础 - JQuery自定义校验器
前端基础 - JQuery自定义校验器
40 0
|
8月前
|
前端开发 JavaScript
前端基础 - JavaScript之表单获取焦点及失去焦点
前端基础 - JavaScript之表单获取焦点及失去焦点
97 0
|
6天前
|
JSON 前端开发 JavaScript
前端上传文件前校验文件数据
该文介绍了如何在Vue项目中实现批量导入Excel数据的校验。使用Element UI的`el-upload`组件上传文件,通过FileReader读取内容,结合XLSX库解析Excel为JSON。解析过程包括将二进制数据转换为workbook对象,提取worksheet并转化为JSON。之后,遍历JSON数据进行字段校验,若发现空值则记录错误。提供的Demo展示了选择Excel文件后控制台显示校验结果。技术栈包括vue 2.6.14、element ui 2.15.14和xlsx 0.17.0。建议将此类功能封装为通用组件以复用。
18 2
前端上传文件前校验文件数据
|
27天前
|
前端开发 JavaScript
前端 JS 经典:双等号运算符的运算和转换规则
前端 JS 经典:双等号运算符的运算和转换规则
23 0
|
1月前
|
前端开发 开发者
【Web 前端】CSS 样式覆盖规则?
【4月更文挑战第22天】【Web 前端】CSS 样式覆盖规则?
|
1月前
|
移动开发 前端开发 JavaScript
前端vue3——实现二次元人物拼图校验
前端vue3——实现二次元人物拼图校验
23 1
|
1月前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
48 1
|
1月前
|
前端开发 数据安全/隐私保护
【sgPasswordInput】自定义组件:带前端校验密码强度的密码输入框,能够提供密码强度颜色提示和文字提示
【sgPasswordInput】自定义组件:带前端校验密码强度的密码输入框,能够提供密码强度颜色提示和文字提示

热门文章

最新文章