vue3中自定义校验函数密码不生效问题

vue3中自定义校验函数密码不生效问题

由于在自定义的校验规则中只校验了有数据的情况,以至于在没输入时,校验不生效

(1)用户不输入校验不生效

const validateSurePassword = (rule, value, callback) => {if (value !== '') {if (value.length < 8) {callback(new Error('请输入至少8位确认密码'))return false} else if (value !== formState.newPassword) {callback(new Error('两次输入的新密码不一致'))return false} else {callback()}}
}
const validatePassword = (rule, value, callback) => {// const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])(?!.*\s).{8,}$/if (value !== '') {if (value.length < 8) {callback(new Error('请输入至少8位的密码'))return false} else if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])(?!.*\s).{8,}$/.test(value)) {callback(new Error('密码必须包含大小字母、数字和特殊字符(@!*#$%&_=)'))return false} else {callback()}}
}

(2)改进上述自定义校验

const validateSurePassword = (rule, value, callback) => {if (value !== '') {if (value.length < 8) {callback(new Error('请输入至少8位确认密码'))return false} else if (value !== formState.newPassword) {callback(new Error('两次输入的新密码不一致'))return false} else {callback()}} else {callback(new Error('请输入确认密码'))return false}
}
const validatePassword = (rule, value, callback) => {// const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])(?!.*\s).{8,}$/if (value !== '') {if (value.length < 8) {callback(new Error('请输入至少8位的密码'))return false} else if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])(?!.*\s).{8,}$/.test(value)) {callback(new Error('密码必须包含大小字母、数字和特殊字符(@!*#$%&_=)'))return false} else {callback()}} else {callback(new Error('请输入新密码'))return false}
}

(3)修改密码弹窗示例

<template><AntDesign_Modal width="380px" :open="props.visible" @close="onCancel" titleText="修改密码"><template #body><div class="changePW_body"><a-formref="formRef":model="formState":label-col="{ span: 6 }":wrapper-col="{ span: 18 }"autocomplete="off":rules="userRules"><a-form-item label="原密码" name="oldPassword"><a-input-password v-model:value="formState.oldPassword" placeholder="请输入原密码" /></a-form-item><a-form-item label="新密码" name="newPassword"><a-input-password v-model:value="formState.newPassword" placeholder="请输入新密码" /></a-form-item><a-form-item label="确认密码" name="passwdCheck"><a-input-password v-model:value="formState.passwdCheck" placeholder="请输入确认密码" /></a-form-item><p class="_ps"><img class="warnIcon" src="@/assets/images/modal/warn.png" alt="" />提示:密码长度不少于8位,格式为大小写字母、数字及特殊字符组合</p><div class="buttonBox"><a-button type="primary" @click="onSure" html-type="submit"> 确定</a-button><Button @click="onCancel">取消</Button></div></a-form></div></template></AntDesign_Modal>
</template>
<script setup>
import { reactive, ref, watch } from 'vue'
import { Button, message } from 'ant-design-vue'
import { updatePassword } from '@/api/login/login'
import AntDesign_Modal from '@/components/antDesign/AntDesign_modal/index.vue'
import { Base64 } from 'js-base64'
import store from '@/store'const props = defineProps({visible: {type: Boolean,default: false}
})const emit = defineEmits(['onCancel'])const formRef = ref(null)watch(() => props.visible,() => {if (formRef.value) {formRef.value?.resetFields()}}
)const formState = reactive({oldPassword: '',newPassword: '',passwdCheck: ''
})const validateSurePassword = (rule, value, callback) => {if (value !== '') {if (value.length < 8) {callback(new Error('请输入至少8位确认密码'))return false} else if (value !== formState.newPassword) {callback(new Error('两次输入的新密码不一致'))return false} else {callback()}} else {callback(new Error('请输入确认密码'))return false}
}const validatePassword = (rule, value, callback) => {// const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])(?!.*\s).{8,}$/if (value !== '') {if (value.length < 8) {callback(new Error('请输入至少8位的密码'))return false} else if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])(?!.*\s).{8,}$/.test(value)) {callback(new Error('密码必须包含大小字母、数字和特殊字符(@!*#$%&_=)'))return false} else {callback()}} else {callback(new Error('请输入新密码'))return false}
}const userRules = reactive({oldPassword: [{required: true,message: '请输入旧密码',trigger: 'blur'}],newPassword: [{required: true,validator: validatePassword,trigger: 'blur'}],passwdCheck: [{ required: true, validator: validateSurePassword, trigger: 'blur' }]
})const handleSubmit = () => {const data = {oldPassword: Base64.encode(formState.oldPassword),newPassword: Base64.encode(formState.newPassword),userId: store.getters.userMessage?.id}updatePassword(data).then(() => {message.success('修改密码成功!')emit('onCancel')})
}const onSure = () => {formRef.value.validate().then(() => {handleSubmit()})
}const onCancel = () => {emit('onCancel')
}
</script><style lang="less" scoped>
.changePW_body {._modalBody {padding: 0;}._ps {color: #165dff;font-size: 12px;margin-top: 12px;.warnIcon {margin-right: 9px;}}.buttonBox {text-align: center;.ant-btn {margin: 26px 5px 0 5px;}}.ant-form-item {margin-bottom: 0 !important;margin-top: 19px !important;margin-right: 16px;}:deep(.ant-input-password) {width: 237px !important;}:deep(.ant-input-affix-wrapper) {width: 237px !important;}
}
</style>

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

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

相关文章

Linux——软件包管理

目录 rpm 包管理 基本介绍 rpm 包的查询指令 ​编辑 rpm 包的卸载和安装 yum rpm 包管理 基本介绍 rpm 包的查询指令 rpm 包的卸载和安装 yum

STM32F407寄存器操作(DMA+SPI)

1.前言 前面看B站中有些小伙伴吐槽F4的SPIDMA没有硬件可控的CS引脚&#xff0c;那么今天我就来攻破这个问题 我这边暂时没有SPI的从机芯片&#xff0c;并且接收的过程与发送的过程类似&#xff0c;所以这里我就以发送的过程为例了。 2.理论 手册上给出了如下的描述 我们关注…

什么是动态规划

动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种用于解决最优化问题的算法设计方法。它通过将大问题分解成小问题&#xff0c;并存储已经解决的小问题的解&#xff0c;以避免重复计算&#xff0c;从而提高算法的效率。 动态规划通常适用于以下几类问…

【动手学深度学习】5.2 参数管理(个人向笔记+代码注释)

之前的课程中&#xff0c;我们只是通过深度学习框架完成训练的工作&#xff0c;而忽略了操作参数的具体细节。所以我们我们介绍的内容有&#xff1a; 访问参数&#xff0c;用于调试&#xff0c;诊断和可视化参数初始化在不同的模型组件间共享参数 下面是一个有单隐藏层的多层感…

如何把视频变成自己的原创?提升视频原创度的7个技巧

在短视频平台发布作品时&#xff0c;时常因为原创问题&#xff0c;而被限流。如何在海量视频中脱颖而出&#xff0c;让自己的作品具有独特性和原创性&#xff0c;是每位创作者都需要思考的问题。本文将详细介绍如何通过一系列前期准备和后期处理技巧&#xff0c;将视频素材转化…

模版进阶 非类型模版参数

一.模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使用。 #i…

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介&#xff1a;云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…

操作系统 | 学习笔记 | 王道 | 4.3 文件系统

4.3 文件系统 4.3.1 文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 用一个例子来辅助记忆文件系统的层次结构&#xff1a; 假设某用户请求删除文件"D:/工作目录/学生信息.xIsx"的最后100条记录。 用户需…

在 Windows 11 安卓子系统中安装 APK 的操作指南

这个软件好像不可以在纯android系统中使用&#xff08;不知道是缺了什么&#xff09;&#xff0c;其他对于android的虚拟机要不缺少必要功能组件&#xff0c;要不性能过于低下。本方法致力于在带有谷歌框架WSA中运行该APK 在 Windows 11 安卓子系统中安装 APK 的操作指南 本指…

2024系统分析师---试题四:论数据分片技术及其应用

1. 概要叙述你参与管理和开发的软件项目以及承担的主要工作 在近期&#xff0c;我有幸参与了一个大规模电商平台的开发与管理工作&#xff0c;该平台旨在为用户提供流畅的购物体验&#xff0c;处理高并发交易以及海量商品数据。作为项目的技术负责人&#xff0c;我的主要工作包…

消息摘要算法

算法特点 a) 消息摘要算法/单向散列函数/哈希函数 b) 不同长度的输入&#xff0c;产生固定长度的输出 c) 散列后的密文不可逆 d) 散列后的结果唯一 e) 哈希碰撞 f) 一般用于校验数据完整性、签名sign 由于密文不可逆&#xff0c;所以服务端也无法解密 想要验证&#xf…

前端 | Uncaught (in promise) undefined

前端 | Uncaught (in promise) undefined 最近开发运行前端项目时&#xff0c;经常预计控制台报错 &#xff0c;如下图&#xff1a; 这里我总结下&#xff0c;这种报错的场景和原因&#xff0c;并通过实际代码案例帮助小伙伴更好理解下 。 文章目录 前端 | Uncaught (in promi…

若依前端后打成一个JAR包部署

客户需要将项目前后端作为一个整体打包成jar&#xff0c;不使用nginx方式转发。使用框架是若依前后端分离&#xff0c;后端springboot&#xff0c;前端vue&#xff0c;目的就是把vue打入jar。 一、前端修改 ruoyi-ui/src/router/index.js文件 &#xff0c;将 mode: ‘history’…

vue-jsonp的使用和腾讯地图当前经纬度和位置详情的获取

1.下载&#xff1a; npm install –save vue-jsonp2.main.js中引入&#xff1a; //腾讯逆地址解析会用到jsonp import {VueJsonp} from vue-jsonp; Vue.use(VueJsonp);3.腾讯地图中使用 uniapp中获取*经纬度*和通过经纬度获取当前**位置详情** //获取当前经纬度 getLocation…

职场上的人情世故你知多少

1.发微信找人帮忙&#xff0c;半天不回&#xff0c;那基本没戏了&#xff0c;不要再打扰了&#xff0c;懂得都懂。 2.能力越大&#xff0c;事情越多&#xff0c;要懂得张弛有度&#xff0c;不要把自己全抛出去&#xff0c;给自己留点余地&#xff0c;毕竟你不知道别人如何暗地…

Windows电脑本地安装AI文生音乐软件结合内网穿透远程访问制作

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 今天和大家分享一下在Windows系统电脑上本地快速部署一个文字生成音乐的AI创作服务MusicGPT&#xff0c;并结合cpolar内网穿透工具实现随时随地远程访问使用进行AI音…

光伏“地图导航”:光照、政策、电价一目了然

当代的快节奏生活中&#xff0c;地图导航的精准定位技术如同一盏照明灯&#xff0c;为我们照亮了前方的道路。许多光伏人纷纷反映&#xff0c;如果光伏也有这样的地图就好了&#xff0c;能够结合各种建设光伏的因素快速完成选址&#xff0c;能够极大地提高效率。今天小编就来分…

PAT甲级-1013 Battle Over Cities

题目 题目大意 给定一个城市图&#xff0c;如果攻陷一个城市&#xff0c;该城市连接的所有路都要被销毁。要求计算出连通剩余的城市最少需要修建几条路。该图有n个顶点&#xff0c;m条边&#xff0c;k个重点城市。分别求出每个重点城市被攻陷&#xff0c;连通剩余城市需要修建…

[面试] java开发面经-1

前言 目录 1.看到你的简历里说使用Redis缓存高频数据&#xff0c;说一下Redis的操作 2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩 3.你的项目中使用了ThreadLocal&#xff0c;那么当有两个请求同时发出时&#xff0c;会怎么处理&#xff0c;可以同时处理两个请求吗 4.使用…

第三课 Vue中的方法的定义及事件绑定指令

Vue中的方法的定义及事件绑定指令 方法定义 方法定义通过Vue对象中的methods属性进行拓展 1&#xff09;基础示例 new Vue({el: #app,methods: {fun(){alert(1);}}})2&#xff09;操作对象数据 new Vue({el: #app,data: {val: Hello World !},methods: {fun(){alert(val);}}…