原生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 相关文章推荐
使用UglifyJS合并/压缩JavaScript的方法
Mar 07 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
May 11 Javascript
javascript实现禁止鼠标滚轮事件
Jul 24 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
Jan 31 Javascript
基于JavaScript实现每日签到打卡轨迹功能
Nov 29 Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 Javascript
详解Vue.js中引入图片路径的几种方式
Jun 17 Javascript
解决微信小程序中的滚动穿透问题
Sep 16 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
Sep 20 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 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
JAVA/JSP学习系列之四
2006/10/09 PHP
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
模拟flock实现文件锁定
2007/02/14 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
php头像上传预览实例代码
2017/05/02 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
使用js获取QueryString的方法小结
2010/02/28 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
python定向爬取淘宝商品价格
2018/02/27 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
python绘制随机网络图形示例
2019/11/21 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
关于保护环境的标语
2014/06/09 职场文书
个人专业技术总结
2015/03/05 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
导游词之太原天龙山
2020/01/02 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技