为了顺应网络安全的要求,前端要在登录的时候验证用户的密码是否为弱密码。特此记录。

密码的校验规则是: 用户密码长度不少于8位,包裹大小写字母、数字、字符中的至少3种,不能包含用户名。

1、开始写出各个规则的正则

// 各个规则的验证正则 统一一个名为  validatePwd.ts 的文件中  具体内容如下:// 是否包含大写字母
const hasUpperLetter = /(?=.*[A-Z])/;// 是否包含小写字母
const hasLowerLetter = /(?=.*[a-z])/;// 是否包含大小写
const hasUpperAndLowerLetter = /(?=.*[A-Z])(?=.*[a-z])/;// 是否包含数字
const hasDigit = /(?=.*[0-9])/;// 是否包含字符
const hasChar = /(?=.*[\W])/;// 以下为导出的方法// 检测包含大写字母
export function checkUpperLetter (str: string):boolean {return hasUpperLetter.test(str)
}// 检测包含小写字母
export function checkLowerLetter (str: string):boolean {return hasLowerLetter.test(str)
}// 检测包含大小写字母
export function checkLetter (str: string):boolean {return hasUpperAndLowerLetter.test(str)
}// 检测包含数字
export function checkDigit (str: string):boolean {return hasDigit.test(str)
}// 检测包含字符
export function checkChar (str: string):boolean {return hasChar.test(str)
}// 综合验证,长度不小于8
export function finalCheck (str: string):boolean {return /(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W]).{8,}/.test(str)
}

2、在登陆前校验密码

// 需要引入上边封装的所有方法
import {.......
} from './validate';// 登陆页 登录逻辑// 在这一步之前需要对登陆表单进行简单的校验,比如不能为空等等
const handleLogin = () => {const type: string = checkPassword(loginForm.password); // 密码// 提示用户的信息const messageObj = {user: '密码不能包含用户名',char: '密码必须包含特殊字符',lower: '密码必须包含小写字母',upper: '密码必须包含大写字母',ul: '密码必须包含大小写字母',digt: '密码必须包含数字',pwd: '密码长度不小于8位,必须包含大写、小写数字、字符中至少3种'};if (type != 'ok') {// 在这里弹出对应的提示alert(messageObj[type]);}
}// 这里需要确定密码是不符合哪一种类型
const checkPassword = (str: string): string => {let type: string;// 需要在这里传入用户名,生成判断是否包含用户名的正则// loginForm.user 是一个变量,就是用户输入的用户名const hasUser: boolean = new RegExp(`(?=.*${loginForm.user})`);if (hasUser) {type = 'user'} else if (!checkChar(str)) {type = 'char'} else if (!hasLowerLetter(str)) {type = 'lower'} else if (!hasUpperLetter(str)) {type = 'upper'} else if (!checkLetter(str)) {type = 'ul'} else if (!hasDigit(str)) {type = 'digt'} else if (!finalCheck(str)) {type = 'pwd'} else {type = 'ok' //这个 ok 代表就是通过了验证}return type
}

3、终极综合校验

上边是一个一个的去校验,而需求是大小写、字母、数字和特殊字符至少三种,所以直接上终极正则:

// 终极正则
// 检验密码必须包含大小写字母、数字、特殊字符中至少3中  并且位数不小有8, 如下const finalCheckPwd = /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,16}$/;// 校验密码
const checkPwd: boolean = finalCheckPwd.test(loginForm.password);// 校验信息
const message = checkPwd ? '通过校验' : '不通过校验';

4、配合element-plus的Form进行登录验证

vue3配合element-plus进行登陆操作,可以自定义form的校验规则

const ruleForm = reactive({user: '', // 用户pass: '', // 密码
})// 密码校验
const validatePass2 = (rule: any, value: any, callback: any) => {if (value === '') {callback(new Error('密码不能为空'))} else if (loginForm.user === '') {// 解释一下为什么要判断用户名不能为空// 因为我们的密码校验其中有一项是要校验是否包含用户名,如果用户名不输入,怎么校验???callback(new Error('请先输入用户名'))} else {const finalCheckPwd = /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)                        (?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,16}$/;// 校验密码const checkPwd: boolean = finalCheckPwd.test(loginForm.password);if (!checkPwd) {callback(new Error('密码必须不少于8位,包含大小写、字母、字符至少三种'))} else {callback();// 注意,这个空的callback非常重要,没有它作为结束,整个校验会出问题}}
}const rules = reactive({user: [{ required: true, message: '用户名不能为空',  trigger: 'blur' }],pass: [{ validator: validatePass2, trigger: 'blur' }],
})

登录示意图

js正则验证弱密码(大小写,特殊字符,数字不少于8位) element-plus 表单验证相关推荐

  1. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

      方法使用前需了解: 来自"和"小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查 ...

  2. 【修真院web小课堂】angular js常用指令 ng-blur、ng-change、ng-focus、ng-disabled是如何运用到表单验证中的?

    大家好,我是IT修真院武汉分院web第16期的学员孟晨,一枚正直纯洁善良的web程序员 今天给大家分享一下,修真院官网js(职业)任务八,深度思考中的知识点--angular js常用指令 ng-bl ...

  3. vue + element 自定义表单验证的时候 需要通过请求后端接口验证

    vue + element 自定义表单验证的时候 需要通过请求后端接口验证 做vue项目的时候遇到了一个需求,在验证某个表单项时不仅需要是必填项而且要去通过接口校验是否有重复值. // templat ...

  4. Element UI——表单验证输入的数字检测出来是string解决方案

    问题描述 打印 判断类型 问题分析 解决方案 数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符. < ...

  5. element ui表单验证

    这里通过一个实例来说明表单验证: 如上图所示,我们点击"添加新用户"弹出弹框 这里只讲弹框里面的校验代码: <template><div id="cre ...

  6. element ui 表单验证为正整数

    很多时候都会用表单中输入正整数的情况,在element ui中可以用el-input-number 标签来显示输入框是number类型的,或者type="number"也可以的,但 ...

  7. Bootstrap5使用bootstrapValidator完成表单验证(包括解决样式、图标不显示及其他组件表单验证出问题解决方案)

    以下都为个人实践. CND引入bootstrap5及bootstrapValidator文件 bootstrap5 <link href="https://cdn.jsdelivr.n ...

  8. element ui 表单验证残留提示处理

    问题:如果vue的同一个页面拥有两个表单.验证第一个表单时没有通过就切换到第二个,那么第二个表单会出现验证错误的信息 点击编辑框 解决方法:添加表单重置验证 我们可以通过为两个表单添加ref属性 之后 ...

  9. element自定义表单验证上传身份证正反面的实现

    效果图 <template>     <div>         <el-form :model="personalForm" :rules=&quo ...

最新文章

  1. 服务器主机防御系统,主机入侵防御系统
  2. pybind 传递指针
  3. 基于BP神经网络+HOG特征提取的视频中车辆车牌识别算法仿真
  4. Andrew Ng's Deep Learning学习记录
  5. Effective Java(1)-创建和销毁对象
  6. 微星刀锋 无法进入bios_夏天来了 微星主板风扇转速调节攻略
  7. 训练集,验证集,测试集比例
  8. ssis 映射列 使用变量_SSIS中的动态列映射:SqlBulkCopy类与数据流
  9. 中文OCR的汉字按常见度的划分
  10. 八大常用渗透测试工具
  11. 糖豆广场舞完成C轮融资,腾讯、顺为、GGV、IDG投资...
  12. 2017智能周报 | 12.10-12.17 | 工信部发布AI行动计划、各地AI研究院纷纷成立、DM证明AI存在反人类风险……
  13. 读 Timothy Gowers 之 Mathematics: A Very Short Introduction
  14. 无线通信与生活-(1)
  15. 【Nacos】Nacos注册中心的使用
  16. JAVA的面向对象编程
  17. PDF转换器用什么好?这款一定能够帮到你
  18. 我的世界java蜜蜂_在最新的《我的世界》Java版更新中 蜜蜂是所有的热点
  19. 神经网络中Batch Size的理解
  20. QT报错:Makefile.Debug : moc_xxx.cpp error1

热门文章

  1. Vundle简介安装
  2. LKT4200 32位高端防盗版加密芯片
  3. 两个无线路由器用网线连接
  4. Partner Selection for the Emergence of Cooperation in Multi-Agent Systems Using RL 笔记
  5. 0基础学UI设计必须做好4个准备!
  6. 小学生python趣味编程-图书推荐:《Scratch 3.0少儿游戏趣味编程》
  7. IPv4、IPv6地址、组播地址及子网子划分详解二子网划分
  8. 漫画 | IT大牛是怎样炼成的?
  9. 谷歌账号注册流程全攻略
  10. 直播10 直播室 开张