vue2+element-plus 密码校验及动态校验

这篇具有很好参考价值的文章主要介绍了vue2+element-plus 密码校验及动态校验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

应用场景

团队想给新系统的新建/修改用户、个人设置的修改密码中的密码输入框加一个密码校验。具体加什么校验,产品参考了几个增加密码复杂度的校验,比如不能输入连续的3个数字,这种校验,但是好像密码的复杂度并不能保证系统的安全性,好像邮箱验证会比较安全?虽然密码只防君子不妨小人,但是设置密码校验也只是避免用户输入过于简单的密码,比如:123,123456,111111这种。

针对我们这个项目,我们的密码校验规则是:

包含英文字母大小写、数字和特殊符号且在8到16位的任意组合


开发流程分析

首先我有三个场景需要设置密码:

1.个人设置——修改密码:旧密码、新密码、重复密码(3个输入框)

2.用户管理——新建用户:密码、重复密码(2个输入框)

3.用户管理——修改用户:重置密码(1个输入框)

针对三个不同环境,划分一下,分别是需要以下校验:

  • 新密码与旧密码,不能重复
  • 新密码/密码 与重复密码,必须一致
  • 重置密码、新密码、密码,必须校验正则
  • 以上输入框也要校验输入的字符必须在8—16个字符之间
  • 并且由于新建和修改用户用的同一个表单,涉及动态展示校验规则

以上是对于需求的确定,关于开发,由于涉及两个页面,分别从个人设置和用户管理,分析具体的代码逻辑。


 详细开发场景

1.个人设置——修改密码

<el-form ref="passwdForm" :model="passwd" label-width="100px" style="margin: 16px" :rules="rules" size="default">
        <el-form-item prop="oldVal" label="旧密码">
          <el-input v-model.trim="passwd.oldVal" type="password" show-password placeholder="请输入旧密码"></el-input>
        </el-form-item>
        <el-form-item prop="newVal" label="新密码">
          <el-input
            v-model.trim="passwd.newVal"
            type="password"
            show-password
            placeholder="请输入包含英文字母大小写、数字和特殊符号的 8-16 位组合"
          ></el-input>
        </el-form-item>
        <el-form-item prop="repeatNewVal" label="重复密码">
          <el-input
            v-model.trim="passwd.repeatNewVal"
            type="password"
            show-password
            placeholder="请重复密码"
          ></el-input>
        </el-form-item>
        <div style="width: 100%; height: 40px">
          <el-button style="float: right; margin: 4px" @click="$refs['passwdForm'].resetFields()">清空</el-button>
          <el-button type="primary" style="float: right; margin: 4px" @click="onSubmit">确定</el-button>
        </div>
      </el-form>
 data() {
//新密码与重复密码不一致,一定写在data里但不是return里
    let repeatValidate = (rule, value, callback) => {
      if (value !== this.passwd.newVal) {
        callback(new Error('两次输入密码不一致!'))
      } else {
        callback()
      }
    }
//正则校验主要是这部分:/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,16}$
//其中特殊字符包括:._~!@#$^&*  (比较常见)
    let newValValidate = (rule, value, callback) => {
      if (value === this.passwd.oldVal) {
        callback(new Error('新密码不能与旧密码一致'))
      } else if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,16}$/g.test(value)) {
        callback()
      } else {
        callback(new Error('请输入包含英文字母大小写、数字和特殊符号的 8-16 位组合'))
      }
    }

    return {
      passwd: {
        oldVal: '',
        newVal: '',
        repeatNewVal: ''
      },
      showPasswdChange: false,
      rules: {
        oldVal: [{ required: true, message: '请输入旧密码', trigger: 'blur' }],
        newVal: [
          { required: true, message: '新密码不能为空', trigger: 'blur' },
          {
            min: 8,
            max: 16,
            message: '长度应在 8 到 16 个字符',
            trigger: 'blur'
          },
          { validator: newValValidate, trigger: 'blur' }
        ],
        repeatNewVal: [
          { required: true, message: '请再输入一遍新密码', trigger: 'blur' },
          { validator: repeatValidate, trigger: 'blur' }
        ]
      }
}

实现效果,如下:

vue2+element-plus 密码校验及动态校验

 vue2+element-plus 密码校验及动态校验

2.用户管理——新建/修改用户 

这里新建用户的时候,有密码和重复密码两个输入框,这是必填项

但是修改用户的时候,只展示重置密码的输入框,并且 不是必填项,所以这个输入框的rules里面的 required: true,这个就去掉。

         
//新建用户——新密码、重复密码
   <el-form-item label="密码" prop="userPasswd"  v-if="!seeEnable && !editEnable">
              <el-input
                v-model.trim="userInfo.userPasswd"
                show-password
                placeholder="请输入包含英文字母大小写、数字和特殊符号的 8-16 位组合"
              ></el-input>
            </el-form-item>
            <el-form-item label="重复密码" prop="userPasswdRe">
              <el-input v-model.trim="userInfo.userPasswdRe" show-password placeholder="请重复密码"></el-input>
</el-form-item>
//修改用户——重置密码
<el-form-item v-if="editEnable" label="重置密码" prop="userPasswdReset">
            <el-input
              v-model="userInfo.userPasswdReset"
              show-password
              placeholder="请输入包含英文字母大小写、数字和特殊符号的 8-16 位组合"
            ></el-input>
</el-form-item>
 
data(){
    /*
     *@description:重复密码校验
     *@date: 2022-07-14 15:25:12
     */
    let checkPasswdRe = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请再次输入密码'))
      } else if (value !== this.userInfo.userPasswd) {
        callback(new Error('两次输入密码不一致!'))
      } else {
        callback()
      }
    }
    //密码校验
    let newValValidate = (rule, value, callback) => {
      if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,16}$/g.test(value)) {
        callback()
      } else {
        callback(new Error('请输入包含英文字母大小写、数字和特殊符号的 8-16 位组合'))
      }
    }
//重置密码校验
    let checkPasswdReset = (rule, value, callback) => {
      if (!value) {
        return callback()
      } else {
        if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,16}$/g.test(value)) {
          callback()
        } else {
          callback(new Error('请输入包含英文字母大小写、数字和特殊符号的 8-16 位组合'))
        }
      }
    }
    return {
     
      seeEnable: true, //查看
      editEnable: false, //修改用户信息时展示重置密码
      userInfo: {
        nickName: '',
        userPasswd: '',
        userPasswdRe: '',
        phone: '',
        userPasswdReset: ''
      },
      rules: {
        userPasswd: [
          { required: true, message: '密码不能为空', trigger: 'blur' },
          {
            min: 8,
            max: 16,
            message: '长度应在 8 到 16 个字符',
            trigger: 'blur'
          },
          { validator: newValValidate, trigger: 'blur' }
        ],
        userPasswdRe: [
          {
            required: true,
            validator: checkPasswdRe,
            trigger: 'blur'
          }
        ],
        userPasswdReset: [
          {
            min: 8,
            max: 16,
            message: '长度应在 8 到 16 个字符',
            trigger: 'change'
          },
          { validator: checkPasswdReset, trigger: 'change' }
        ]
    }
}

实现效果如下:

vue2+element-plus 密码校验及动态校验

 vue2+element-plus 密码校验及动态校验

3.关于提交——校验

 async editSubmitForm() {
      this.$refs['ruleForm'].validate(async (valid) => {
        if (valid) {
        //提交操作

        }
     })
},

总结/分析:

密码校验,只是表单经常校验的一类,之前遇到select的校验,经常会遇到一打开弹窗,表单的校验就出现的bug,这是由于数据的初始化中的结构和select获取的数据结构不一致的原因,这里也记录一下。

以上就是关于密码校验的开发,其实密码校验还有很多常见的正则类型,比如:

密码包含字母、数字组成,区分大小写的8-18位组合:^(?=.*[a-zA-Z])(?=.*[0-9])[A-Za-z0-9]{8,18}$

记录over。文章来源地址https://www.toymoban.com/news/detail-425125.html

到了这里,关于vue2+element-plus 密码校验及动态校验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3中动态绑定:disabled element-plus使用方法

    @change=\\\"whetherFlag($event)\\\"  根据value值判断是否禁用 :disabled=\\\"isShow\\\" 初始值为禁用状态 const isShow = refboolean(true);  根据value的值判断是否禁用  

    2024年01月25日
    浏览(44)
  • Vue3+Element-Plus 实现用户列表页面的UI结构及动态加载表单功能 三一

    1.1 头部是一个面包屑 (Breadcrumb)导航区域 1.2 白色区域是一个卡片(Card)视图 1.3 卡片 (Card)视图中嵌套了   输入框(Input )、 按钮(Button)、 表单(Form)、分页(Pagination ) Breadcrumb 面包屑 | Element Plus (gitee.io) https://element-plus.gitee.io/zh-CN/component/breadcrumb.html  2.1.1 复制

    2023年04月09日
    浏览(44)
  • Vue3+Vue-Router+Element-Plus根据后端数据实现前端动态路由——权限管理模块

    提示:文章内容仔细看一些,或者直接粘贴复制,效果满满 提示:文章大概 1、项目:前后端分离 2、前端:基于Vite创建的Vue3项目 3、后端:没有,模拟的后端数据 4、关于路径“@”符号——vite.config.js 文件里修改 提示:以下是本篇文章正文内容,下面案例可供复制粘贴使用

    2024年02月02日
    浏览(38)
  • element-plus 动态Icon图标

    目录 1,前言 2,使用 2.1,方式一 2.2,方式二 源自 Element Plus 团队正在将原有组件内的 Font Icon 向 SVG Icon 迁移,请多多留意更新日志, 及时获取到更新信息,Font Icon 将会在第一个正式发布被废弃,请尽快迁移 在此记录一下如何使用element-plus中的icon组件 环境: Vue:3.2.16 Elem

    2024年02月16日
    浏览(29)
  • element-plus日历(Calendar)动态渲染+避坑指南

    #dateCell 驼峰书写

    2024年02月11日
    浏览(28)
  • (el-Form)操作(不使用 ts):Element-plus 中 Form 表单组件校验规则等的使用

    1、 Element-plus 提供 Form 表单组件情况: 其一、 Element-plus 自提供的 Form 代码情况为(示例的代码): 代码地址( 直接点击下面 url 跳转 ):https://element-plus.gitee.io/zh-CN/component/form.html#自定义校验规则 其二、页面的显示情况为: 2、目标想修改后的情况: // 此时虽然页面的样式有些变

    2024年02月13日
    浏览(43)
  • vue3使用element-plus

    element-ui 是配合 vue2 使用,element-plus 是配置 vue3 使用的 1. 包管理器的方式 如果是使用 webpack 或者 vite 打包工具新建的项目 2. 浏览器直接导入 直接通过浏览器的 HTML 标签导入 Element Plus,然后就可以使用全局变量 ElementPlus 1. 导入全部组件且注册所有的图标 声明使用 ElementPl

    2024年02月08日
    浏览(58)
  • Vue3导入Element-plus方法

    先引入依赖 main.js中要引入两个依赖 然后 这个东西 我们最好还是挂载vue上 所以 还是 然后 我们可以在组件上试一下用一个ElementUi的表格组件 参考代码如下 运行结果如下 也是没有任何问题

    2024年02月06日
    浏览(31)
  • vue3 element-plus 实现图片预览

    element-plus下有这么一个组件 el-image-viewer /,但是这个组件是没写在文档上面的,像普通组件一样使用即可 可以通过点击按钮实现图片预览,而非el-image组件只能通过点击图片实现预览 2.1封装组件 2.3组件使用 在需要使用的地方引入,然后使用即可,这不是重点,每个人使用的

    2024年02月15日
    浏览(45)
  • element-plus el-table、动态添加、删除行、input输入框

    模板部分,使用 el-table 元素作为表格容器,绑定 data 属性传入表格数据。用 v-for 指令遍历每一项数据,使用普通文本或 el-input 组件渲染每个单元格。表格最后一列为操作列,包含 “Add” 和 “Delete” 两个按钮,点击它们可以增加或删除数据行: 逻辑部分,定义 tableData 数据

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包