原生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 相关文章推荐
asp批量修改记录的代码
Jun 25 Javascript
javascript 硬盘序列号+其它硬件信息
Dec 23 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
原生js实现随机点餐效果
Dec 10 Javascript
JS函数基本定义与用法示例
Jan 15 Javascript
VSCode搭建Vue项目的方法
Apr 30 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各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
python 列表删除所有指定元素的方法
2018/04/19 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
python解析xml简单示例
2019/06/21 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
基层工作经历证明
2014/01/13 职场文书
铁路个人事迹材料
2014/01/30 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
主持稿开场白
2015/06/01 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
国庆阅兵观后感
2015/06/15 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
Python初识逻辑与if语句及用法大全
2021/08/07 Python