若依 ruoyi-vue 用户账号前后端参数校验密码 手机号 邮箱

在这里插入图片描述
在这里插入图片描述

前端

<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body><el-form ref="form" :model="form" :rules="rules" label-width="120px"><el-row><el-col :span="12"><el-form-item label="姓名/名称" prop="userName"><el-input v-model="form.userName" placeholder="请输入姓名/名称"/></el-form-item></el-col><el-col :span="12"><el-form-item label="手机号码" prop="mobile"><el-input v-model="form.mobile" placeholder="请输入手机号码"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="邮箱" prop="email"><el-input v-model="form.email" placeholder="请输入邮箱"/></el-form-item></el-col><el-col :span="12"><el-form-item label="性别" prop="gender"><el-radio v-model="form.gender":label="dict.value"v-for="dict in dict.type.gender":key="dict.value">{{ dict.label }}</el-radio></el-form-item></el-col></el-row><el-row><el-row><el-col :span="12"><el-form-item label="密码" prop="password"><el-input v-model="form.password" placeholder="请输入密码" type="password" maxlength="20"show-password/><password-strength v-model="form.password" style="padding-top: 10px;"></password-strength></el-form-item></el-col><el-col :span="12"><el-form-item label="确认密码" prop="confirmPassword"><el-input v-model="form.confirmPassword" placeholder="请输入确认密码" type="password" maxlength="20"show-password/></el-form-item></el-col></el-row></el-row><el-row><el-col :span="12"><el-form-item label="所属地域" prop="areaCode"><treeselect v-model="form.areaCode" :options="tzSysTreeDictOptions":normalizer="normalizer" placeholder="请所属地域"/></el-form-item></el-col><el-col :span="12"><el-form-item label="领域" prop="domain"><el-select v-model="form.domain" placeholder="请选择领域" style="width:100%"><el-optionv-for="dict in dict.type.tzLyUserDomain":key="dict.value":label="dict.label":value="dict.value"></el-option></el-select></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="证件类型" prop="idType"><el-select v-model="form.idType" placeholder="请选择证件类型" style="width:100%"><el-optionv-for="dict in dict.type.certType":key="dict.value":label="dict.label":value="dict.value"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="证件号码" prop="idCard"><el-input v-model="form.idCard" placeholder="请输入证件号码" style="width:100%"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="民族" prop="ethnicity"><el-select v-model="form.ethnicity" placeholder="请选择民族" style="width:100%"><el-optionv-for="dict in dict.type.ethnicity":key="dict.value":label="dict.label":value="dict.value"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="政治面貌" prop="politicalStatus"><el-select v-model="form.politicalStatus" placeholder="请选择政治面貌" style="width:100%"><el-optionv-for="dict in dict.type.politicalStatus":key="dict.value":label="dict.label":value="dict.value"></el-option></el-select></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="职业" prop="occupation"><el-select v-model="form.occupation" placeholder="请选择职业" style="width:100%"><el-optionv-for="dict in dict.type.trade":key="dict.value":label="dict.label":value="dict.value"></el-option></el-select></el-form-item></el-col><el-col :span="12"><el-form-item label="工作单位(公司)" prop="unit"><el-input v-model="form.unit" placeholder="请输入工作单位(公司)"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="职务" prop="job"><el-input v-model="form.job" placeholder="请输入职务"/></el-form-item></el-col><el-col :span="12"><el-form-item label="个人介绍" prop="introduction"><el-input v-model="form.introduction" placeholder="请输入个人介绍"/></el-form-item></el-col></el-row></el-form><div slot="footer" class="dialog-footer"><el-button type="primary" @click="submitForm">确 定</el-button><el-button @click="cancel">取 消</el-button></div></el-dialog>
 // 表单校验rules: {userName: [{ required: true, message: '姓名/名称不能为空', trigger: 'blur' }],mobile: [{ required: true, trigger: 'blur', validator: this.validatePhoneNumber }],password: [{ trigger: 'blur', validator: this.validatePassword }],confirmPassword: [{ trigger: 'blur', validator: this.validateConfirmPassword }],email: [{ required: true, message: '邮箱不能为空', trigger: 'blur' },{pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,message: '请输入正确的邮箱地址',trigger: ['blur', 'change']}],areaCode: [{ required: true, message: '所属地域不能为空', trigger: 'blur' }],domain: [{ required: true, message: '领域不能为空', trigger: 'blur' }],idType: [{ required: true, message: '证件类型不能为空', trigger: 'blur' }],idCard: [{ required: true, validator: this.validateChineseIDCard, trigger: 'blur' }]},
 //校验确认密码validateConfirmPassword(rule, value, callback) {if (!this.isInsert) {callback()}if (value !== this.form.password) {callback(new Error('密码和确认密码不一致'))} else {callback()}},//校验身份证号码validateChineseIDCard(rule, value, callback) {if (this.form.idType!=='1'){callback()}const reg = /(^\d{15}$)|(^\d{17}(\d|X|x)$)/if (!value) {callback(new Error('身份证号码不能为空'))} else if (!reg.test(value)) {callback(new Error('身份证号码格式不正确'))} else {callback()}},//校验密码validatePassword(rule, value, callback) {if (!this.isInsert) {callback()}// 密码必须包含数字、小写字母、大写字母和特殊字符中的至少三种const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W_]).{6,20}$/if (!value) {callback(new Error('密码长度要在 6 到 20 个字符'))} else if (value.length < 6 || value.length > 20) {callback(new Error('密码长度要在 6 到 20 个字符'))} else if (!reg.test(value)) {callback(new Error('密码必须包含数字、小写字母、大写字母和特殊字符中的至少三种'))} else {callback()}},//校验手机号码validatePhoneNumber(rule, value, callback) {const reg = /^1[3-9]\d{9}$/if (!value) {callback(new Error('手机号不能为空'))} else if (!reg.test(value)) {callback(new Error('手机号格式不正确'))} else {callback()}},

后端

枚举
package com.huida.common.valid;import javax.validation.groups.Default;public interface ValidParameterTzLyUser extends Default {interface User {}interface Group {}
}
实体
    /*** 密码* 不传递密码给前端,但是后端数据库查出来使用,允许前端传密码过来*/@Size(min = 1, max = 30, message = "密码长度不能超过30个字符",groups = {ValidParameterTzLyUser.User.class, ValidParameterTzLyUser.Group.class})@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)private String password;/*** 统一社会信用代码,企业账号要校验统一社会信用代码*/@Size(min = 1, max = 32, message = "统一社会信用代码不能为空,统一社会信用代码长度不大于32",groups = {ValidParameterTzLyUser.User.class, ValidParameterTzLyUser.Group.class})private String shxydm;
/*** springboot自带参数校验*/private static final javax.validation.Validator VALIDATOR = Validation.buildDefaultValidatorFactory().getValidator();public static void validate(TzLyUser tzLyUser) {//校验参数Set<ConstraintViolation<TzLyUser>> validate = null;if (TzLyConstants.IDENTITY_REGISTER_USERS.equals(tzLyUser.getIdentity())) {validate = VALIDATOR.validate(tzLyUser, ValidParameterTzLyUser.User.class);} else if (TzLyConstants.IDENTITY_AUTH_GROUP.equals(tzLyUser.getIdentity())) {validate = VALIDATOR.validate(tzLyUser, ValidParameterTzLyUser.Group.class);}if (ObjectUtils.isNotEmpty(validate)) {StringBuilder sb =new StringBuilder();for (ConstraintViolation<TzLyUser> violation : validate) {sb.append(violation.getMessage());sb.append("\n");System.out.println(violation.getMessage());System.out.println(violation);}throw new TipUserException(sb.toString());}if (!PhoneUtil.isMobile(tzLyUser.getMobile())) {throw new TipUserException("手机号码格式不正确");}if (!tzLyUserService.checkMobileUnique(tzLyUser)) {throw new TipUserException("注册失败,手机号码已存在");}String msg = PasswdUtils.verifyPassLevel(tzLyUser.getPassword());if (StringUtils.isNotBlank(msg)) {throw new TipUserException(msg);}}

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

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

相关文章

Vue3骨架屏(Skeleton)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传animated是否展示动画效果booleantruefalsebutton是否使用按钮占位图boolean | SkeletonButtonPropsfalsefalseavatar是否显示头像占位图boolean | SkeletonAvatarPropsfalsefalseinput是否使用输入框占位图boolea…

SOLIDWORKS二次开发服务商 慧德敏学

SOLIDWORKS是一套三维设计软件, 采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图。SOLIDWORKS软件本身所具有的交互方式, 可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改, 而不需要编程。但要实现设计意义上的变量化绘图和系列化设计, 需…

java-查询字符串当中是否包含中文

文章目录 前言java-查询字符串当中是否包含中文 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢迎常来啊…

国际顶会认可!KaiwuDB 论文入选 ICDE 2024

导 读 近日&#xff0c;KaiwuDB 与中国人民大学合作的论文 FOSS: A Self-Learned Doctor for Query Optimizer 被数据库领域顶会The 40th IEEE International Conference on Data Engineering (ICDE 2024) 录用啦! 论文中提出了具备自学习、自诊断能力的查询优化器 FOSS&…

USB官方文档怎么下载

直接登录USB官网"https://usb.org/" 如&#xff0c;我需要查找与USB device class相关的文档 点击搜索后就能找到。 学习还是要以官方文档为主&#xff0c;博客上的介绍不可信&#xff0c;USB协议规范很重要!

商品发布功能

文章目录 1.SPU和SKU介绍1.SPU2.SKU3.两者之间的关系 2.完成商品发布界面1.组件引入1.commoditylaunch.vue 引入到 src/views/modules/commodity下2.multiUpload.vue 引入到 src/components/upload/multiUpload.vue 2.创建菜单1.创建目录2.创建菜单&#xff0c;注意菜单路由要匹…

C++系列-友元

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们在之前的文章有提到友元&#xff0c;我们先来看下面的这段包含了友元的代码&#xff1a; ​​#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace…

CLIP论文学习

学习来自B站bryanyzhu

jdk17安装教程详细(jdk17安装超详细图文)

2021年9月14日JDK17 发布&#xff0c;其中不仅包含很多新语言功能&#xff0c;而且与旧版 JDK 相比&#xff0c;性能提升也非常明显。与之前 LTS 版本的 JDK 8 和 JDK 11 相比&#xff0c;JDK17 的性能提升尤为明显&#xff0c;本文将教你如何安装 相比于JDK1.8&#xff0c;JD…

虚拟机网络设置为桥接模式后未显示网络

本方法为&#xff0c;VMware配置正确&#xff0c;但在尝试其他办法后未能成功解决的人提供一种方法 本机的虚拟机使用NAT模式正常使用 但是使用桥接模式后重启&#xff0c;未发现虚拟机内网络设置,详见下图&#xff1a; 使用 ifconfig 查看网络详情 发现没有ens33接口 查看硬…

LeetCode198:打家劫舍

题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存…

【学习笔记】Windows GDI绘图(六)图形路径GraphicsPath详解(中)

上一篇【学习笔记】Windows GDI绘图(五)图形路径GraphicsPath详解(上)介绍了GraphicsPath类的构造函数、属性和方法AddArc添加椭圆弧、AddBezier添加贝赛尔曲线、AddClosedCurve添加封闭基数样条曲线、AddCurve添加开放基数样条曲线、基数样条如何转Bezier、AddEllipse添加椭圆…

GNSS仿真测试之三种常用坐标系与转换

作者介绍 在当今的全球导航卫星系统&#xff08;GNSS&#xff09;技术领域&#xff0c;仿真测试是评估和验证GNSS接收机性能的关键环节&#xff0c;全球导航卫星系统&#xff08;GNSS&#xff09;仿真测试是确保GNSS接收机和导航解决方案在实际部署前能够正确、可靠地工作的关键…

Gradle常见问题及总结

使用android studio开发项目&#xff0c;难免遇到gradle相关的错误&#xff0c;在此总结。 gradle插件与gradle home版本关系错误 参考更新 Gradle Gradle下载太慢 Index of /gradle/ (tencent.com) 是国内下载地址,手动下载对应版本即可 缓存不刷新 问题描述 maven发布…

jenkins插件之xunit

分析测试工具执行的结果&#xff0c;并图形化&#xff0c;比如phpunit&#xff0c;phpstan,可分析junit格式的结果 安装jenkins插件 搜索xunit并安装 项目配置 配置 - Build Steps 您的项目 - 配置 - Build Steps, 新增 Run with timeout 超时时间根据实际情况配置 Build…

Day38 贪心算法part05

LC435无重叠区间(未掌握) 思路&#xff1a;先对数组进行排序&#xff0c;找到非重叠的区间的个数&#xff0c;然后区间的总数减去非重叠区间的个数即是需要移除的区间的个数与LC452用最少数量的箭引爆气球类似&#xff0c;但是不同的是[1,2]和[2,3]在此题并不是重叠区间但是在…

oracle怎么处理json格式

向数据库导入json相关jar包 loadjava -r -f -u bsuser/XXXX192.168.10.31/bsorcl json.jar 要删除的话&#xff0c;删除指定jar dropjava -u bsuser/XXXX192.168.10.31/bsorcl json.jar select * from user_java_classes 然后我们就可以取到json串中任意节点的值

SpringBoot项目中redis序列化和反序列化LocalDateTime失败

实体类中包含了LocalDateTime 类型的属性&#xff0c;把实体类数据存入Redis后变成这样&#xff1a; 此时&#xff0c;存入redis不会报错&#xff0c;但是从redis获取的时候&#xff0c;会报错&#xff1a; com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…

Springboot项目打包:将依赖的jar包输出到指定目录

场景 公司要对springboot项目依赖的jar包进行升级&#xff0c;但是遇到一个问题&#xff0c;项目打包之后&#xff0c;没办法看到他里面依赖的jar包&#xff0c;版本到底是不是升上去了&#xff0c;没办法看到。 下面是项目打的jar包 我们通过反编译工具jdgui&#xff0c;来…

VUE3和VUE2

VUE3和VUE2 上一篇文章中&#xff0c;我们对VUE3进行了一个初步的认识了解&#xff0c;本篇文章我们来进一步学习一下&#xff0c;顺便看一下VUE2的写法VUE3是否能做到兼容&#x1f600;。 一、新建组件 我们在components中新建一个组件&#xff0c;名称为Peron&#xff0c;…