前端工作小结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

相关文章
|
7月前
|
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。建议将此类功能封装为通用组件以复用。
135 2
前端上传文件前校验文件数据
|
6月前
|
前端开发
Element UI 【实战】纯前端对表格数据进行增删改查(内含弹窗表单、数据校验、时间日期格式)
Element UI 【实战】纯前端对表格数据进行增删改查(内含弹窗表单、数据校验、时间日期格式)
246 6
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
前端技术分享:使用Vue.js构建响应式表单
【10月更文挑战第1天】前端技术分享:使用Vue.js构建响应式表单
|
4月前
|
前端开发 数据安全/隐私保护
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`&lt;select&gt;` 和 `&lt;option&gt;`)、文本域(`&lt;textarea&gt;`)、标签解释(`&lt;label&gt;`)、各类按钮(`&lt;button&gt;`)及表单重置功能、无语义布局标签(`&lt;div&gt;` 和 `&lt;span&gt;`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
|
4月前
|
缓存 前端开发 数据可视化
前端基础(七)_表单的基本组成与使用
本文详细介绍了HTML表单的基本组成和使用,包括`<form>`标签、`<input>`表单域、`<select>`下拉列表、`<textarea>`多行文本域等元素。文章解释了表单的提交方式(GET和POST)、表单域的各种类型(文本、密码、单选按钮、复选框等)、提交按钮和重置按钮的作用,以及如何通过`<label>`标签提高表单的可访问性。此外,还讨论了表单元素的属性,如`readonly`、`disabled`、`maxlength`等。
51 1
|
4月前
|
前端开发 数据安全/隐私保护
【前端web入门第二天】02 表单-input标签-单选框-多选框
本文介绍了HTML中`&lt;input&gt;`标签的基本使用方法及其应用场景,如登录、注册页面和搜索区域。通过设置`type`属性,可以实现文本框、密码框、单选框、多选框及文件上传等功能。此外,还详细说明了占位文本的使用、单选框的常用属性及多选框的默认选中状态,并提供了示例代码与效果展示。
120 7
|
5月前
|
前端开发 JavaScript
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
这篇文章介绍了使用AJAX技术将前端页面中表单接收的多个参数快速便捷地传输到后端servlet的方法,并通过示例代码展示了前端JavaScript中的AJAX调用和后端servlet的接收处理。
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
|
5月前
|
前端开发
第一种方式:使用form表单将前端数据提交到servelt(将前端数据提交到servlet)
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
第一种方式:使用form表单将前端数据提交到servelt(将前端数据提交到servlet)
|
5月前
|
前端开发 JavaScript 数据安全/隐私保护
前端JS正则校验密码之3种实现方式
这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。
172 1
前端JS正则校验密码之3种实现方式
|
5月前
|
存储 JavaScript 前端开发
听说在 Vue 3 中实现动态表单很难?作为一个前端开发者,表示一切都是小意思!!
听说在 Vue 3 中实现动态表单很难?作为一个前端开发者,表示一切都是小意思!!