原生js实现密码强度验证功能


Posted in Javascript onMarch 18, 2020

我们在填写表单的时候,特别是输入密码的时候,经常看到实时显示密码强度的效果,那么这种效果如何通过我们的原生js实现呢?

思路:

1.密码通常是由数字,大写字母,小写字母以及特殊字符组成
2.密码全部是纯数字或者纯大写字母,或者纯小写字母,我们认为是密码强度较低
3.密码由两种混合,我们认为密码强度是中等的
4.密码由三种或者四种混合,我们认为这样的密码组合强度很强
5.通过判断输入的密码每个字符,如果是数字返回1;如果是大写字母,返回2;如果是小写字母,返回4;如果是特殊字符,则返回8(至于为什么选择返返回这些数字请看第六条);
6.初始化一个体现密码强度的变量为0,在二进制下表示也就是0000,将他与我们的返回值进行二进制相或运算
7.比如初始值0000
与数字的返回值1(0001)相或运算,等于0001;
与一个小写字母和大写字母组成的密码相或就是0110;
与大写字母,小写字母,数字组成的密码相或就是0111;
与大写字母,小写字母,数字,特殊字符的密码相或就是1111;
8.将相或结果赋值给这个初始值,通过判断这个值在二进制下有多少个1,就能判断对应密码强度(用0001与这个值做相并计算,同时做无符号右移运算,即可获得1的个数)

以上就是我们的思路,那么我们就可以开始书写我们的代码

①创建一个函数,判断输入值的每一个字符由什么组成的

function charMode(char){
 switch (true) {
  case (char>=48&&char<=57):
   return 1;
   break;
  case (char>=65&&char<=90):
   return 2;
   break;
   case (char>=97&&char<=122):
   return 4;
   break;

  default:
   return 8;
   break;
 } 
}

这里也可以用if else 来做判断,只是没有switch看起来这么爽,同时这里注意,switch()括号里传入的不是输入值,而是一个true;因为case后面返回的是一个布尔值,判断的是布尔值之间是否相等(switch做全等比较,不进行类型转换)

②创建一个函数,用于判断整个输入串的密码强度类型

function checkPsw(password){
 strengh=0;//定义一个全局变量用于检测密码强度
  for(var i=0;i<password.length;i++){   strengh|=charMode(password.charCodeAt(i));
 }
}

这里 |= 的意思是做相或运算,并赋值

③创建一个函数,计算密码强度

function charStrengh(strengh){
 var reference=0;
 for(var i=0;i<4;i++){
  if(strengh&1){
   reference++;
  }
  strengh>>>=1;//无符号右移一位继续匹配
 }
 return reference;
}

这里&1意思是与1(0001)做且运算,>>>=的意思是做无符号右移,比如0101无符号右移就是0010;再做一次无符号右移就是0001;

最后我们通过判断reference的数字就可以知道密码强度了,
再参考上一节的博客日志,实时验证输入内容,通过样式设置就可以达到密码强度实时验证效果了

总结:

在这里我们是通过判断键码来实现判断到底是数字还是大写字母还是小写字母,其实我们还可以使用强大的正则表达式来实现;
常用键码:
数字48-57
大写字母65-90
小写字母97-122

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 时间显示效果代码
Aug 23 Javascript
基于jquery的一个拖拽到指定区域内的效果
Sep 21 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
May 12 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
JS实现针对给定时间的倒计时功能示例
Apr 11 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
Oct 08 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
详解webpack-dev-middleware 源码解读
Mar 23 Javascript
JavaScript实现密码强度实时验证
Mar 18 #Javascript
js如何验证密码强度
Mar 18 #Javascript
js验证密码强度解析
Mar 18 #Javascript
js实现超级玛丽小游戏
Mar 18 #Javascript
vue 封装 Adminlte3组件的实现
Mar 18 #Javascript
JavaScript仿京东秒杀倒计时
Mar 17 #Javascript
JavaScript写个贪吃蛇小游戏(超详细)
Mar 17 #Javascript
You might like
php基础知识:函数基础知识
2006/12/13 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
禁止拷贝网页内容的js代码
2014/01/22 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
Python中random模块生成随机数详解
2016/03/10 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
详解python读取image
2019/04/03 Python
python实现人像动漫化的示例代码
2020/05/17 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
香港交友网站:be2香港
2018/07/22 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
招聘单位介绍信
2014/01/14 职场文书
骨干教师培训方案
2014/05/06 职场文书
锦旗标语大全
2014/06/23 职场文书
家长会欢迎标语
2014/06/24 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
高中数学教学反思范文
2016/02/18 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android