原生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 相关文章推荐
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
js鼠标滑过图片震动特效的方法
Feb 17 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
Sep 07 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
作为老司机使用 React 总结的 11 个经验教训
Apr 08 Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 Javascript
基于Vue插入视频的2种方法小结
Apr 02 Javascript
JS实现使用POST方式发送请求
Aug 30 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
Dec 12 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/10/20 PHP
php实现微信扫码支付
2017/03/26 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
简单的三步vuex入门
2018/05/20 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python高效编程技巧
2013/01/07 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
Python新手学习装饰器
2020/06/04 Python
python如何保存文本文件
2020/06/07 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
实习会计求职自荐信范文
2014/03/10 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
秋天的图画教学反思
2014/05/01 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
《植树问题》教学反思
2016/03/03 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
记一次Mysql不走日期字段索引的原因小结
2021/10/24 MySQL