原生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 相关文章推荐
权威JavaScript 中的内存泄露模式
Aug 13 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
原生JavaScript实现滚动条效果
Mar 24 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
Oct 10 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
Sep 28 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 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下通过POST还是GET来传值
2008/06/05 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
php将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
Django自定义分页效果
2017/06/27 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
Flask框架配置与调试操作示例
2018/07/23 Python
Python 字符串换行的多种方式
2018/09/06 Python
Python unittest单元测试框架总结
2018/09/08 Python
pandas 将索引值相加的方法
2018/11/15 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
六道php面试题附答案
2014/06/05 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
先进个人评语大全
2015/01/04 职场文书
党员评议自我评价
2015/03/03 职场文书
2014年底个人工作总结
2015/03/10 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP