工作187:表单校验规则

第一种常用方式:表单上加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.lengththis.$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为:
图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AndroidStudio关联svn并上传代码到svn服务器上,更换域名

SVN安装选项 到下图位置选择【command line client tools】前面的下拉框&#xff0c;选择【Will be installed on local hard drive】&#xff0c;一直下一步知道安装完成即可。 打开AndroidStudio&#xff0c;按CtrlShifS快捷键&#xff0c;进入Settings设置页面。如上图所示…

docker安装postgres

1、拉取 postgres镜像 docker pull postgres2、开启容器 docker run --name Postgres-0 -e POSTGRES_PASSWORDpassword -d -p 5432:5432 postgres:latest3、打开命令行 docker exec -it Postgres-0 bash4、切换为管理员用户 psql -U postgres5、查看用户 \du6、继续创建数…

MySQL并发复制系列一:binlog组提交 (转载)

http://blog.csdn.net/woqutechteam/article/details/51178803 MySQL Binary log在MySQL 5.1版本后推出主要用于主备复制的搭建&#xff0c;我们回顾下MySQL 在开启/关闭 Binary Log功能时是如何工作的 。 MySQL没有开启Binary log的情况下&#xff1a; InnoDB存储引擎通过re…

工作188:表单校验规则

1绑定rules <el-dialog title"新建账号" :visible.sync"dialogFormVisible" close"close"><!--1.name--><el-form ref"form" :rules"rules" :model"form" size"medium" :label-width&q…

学习knex过程中好的参考资料整理

记录本人制作博客系统和学习knex找的相关资料链接&#xff1a; 1、博客系统 https://github.com/huoguozhang/my-blog/tree/master/models 2、与typescript结合&#xff0c;TypeScript Express Objection.js Knex.js MySQL https://github.com/corocn/ts-server/tree/61c…

js-----Date==字符串

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>js将当前时间转换为字符串日期</title> <script type"text/javascript" src"jquery-1.11.1.min.js"&…

Android Studio 项目断开SVN连接

Android Studio 断开 SVN 1.打开项目所在的文件夹&#xff0c;找到.idea文件夹 2.打开.idea文件夹&#xff0c;找到vcs.xml文件并打开 3.把vcs对应的值删掉&#xff0c;vcs“” 4.重要的来了&#xff0c;删除项目中关联svn时创建的svn隐藏文件。 在查看中设置显示隐藏的文…

工作189:配置表头即可

columns: [{type: "selection", width: "50"},{prop: "id", label: "ID", width: "60", sortable: true},{prop: "name", label: "账号名称", width: "100", sortable: true},{prop: "d…

什么是eager loading

在做objectionknexmysql技术栈开发过程中&#xff0c;进行关联数据查询时&#xff0c;遇到这个关键词eager loading,现在进行解释一下&#xff1a; eager loading其实就是preloading的意思。就是尽可能把后面需要的数据&#xff0c;通过最少的sql语句一起查询出来&#xff0c;从…

Robotium_断言方法assert、is、search

下面的这些方法都主要用来判断测试结果是否与预期结果相符&#xff0c;一般把is和search方法放在assert里面判断。assert最常用的还是assertThat方法&#xff0c;是Junit的判断&#xff0c;这里就不多说了。断言方法assert&#xff08;robotium特有的断言方式&#xff0c;实际项…

工作190:页面数据不显示

账户详情里面没有返回对应的字段 所以页面不显示

mysql两张主表person event加上第三张关联表

有两个对象&#xff0c;个人person、活动event。每个person可以参加多个event&#xff0c;每个event可以由多person参加。数据库表格如下&#xff1a; event - id [int (4),primary] - name [varchar (30)] - …person - id [int (4),primary] - name [varcha…

List的五种去重方式

一、String去重&#xff1a; //set集合去重&#xff0c;不改变原有的顺序public static void pastLeep1(List<String> list){System.out.println("list [" list.toString() "]");List<String> listNewnew ArrayList<>();Set setne…

python Shapely OSError: Could not find lib c or load any of its variants []

mac 升级过后&#xff0c;python项目运行报错python Shapely OSError: Could not find lib c or load any of its variants []。 在github上找到解决办法没记录如下&#xff1a; To recap, I removed anything dealing with conda that depends on geos: conda remove geos, s…

工作192:vue项目如何刷新当前页面

1.场景 在处理列表时&#xff0c;常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-router重新路由到当前页面&#xff0c;页面是不进行刷新的 2.采用window.reload()&#xff0c;或者router.go(0)刷新时&#xff0c;整个浏览器进行…

python保存文件,如果目录不存在,则创建

对于python 3.2 以上版本使用 import osfilename "/user/project/demo.txt" os.makedirs(os.path.dirname(filename), exist_okTrue) with open(filename, "w") as f:f.write("FOOBAR")

CentOS挂Windows的NFS备忘

Windows NFS 安装和配置 注&#xff1a;需要将名称为“所有计算机”的访问类型改为“无访问权限”&#xff0c;再将可访问IP的访问类型改为“读写”&#xff0c;并勾选“允许根目录访问” &#xff0c;如WINDOWS有防火墙开放“2049”端口 CentOS需要开启两个服务&#xff1a; y…

NotificationManager: notifyAsUser: tag=null, id=6, user=UserHandle{0}

Android studio 使用 targetSdkVersion 28 在Android系统大于等于8.0的时候&#xff0c;通知不显示bug解决方法&#xff1a; 1、修改appcompat版本&#xff0c;如果是小于v27 改为 implementation com.android.support:appcompat-v7:27.1.1 2、添加依赖 compile com.git…

工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>

标题[Vue warn]: children must be keyed: 今天学习了VUE的列表排序过渡 碰见报错 报错之前代码为&#xff1a; <transition-group name"flip-list" tag"div"><van-cell v-for"(item,i) in list" v-bind:key"item.id">{…