原生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的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
基于jquery实现等比缩放图片
Dec 03 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
jQuery使用元素属性attr赋值详解
Feb 27 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
从零学习node.js之文件操作(三)
Feb 21 Javascript
原生js实现密码输入框值的显示隐藏
Jul 17 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 Javascript
分享5个顶级的JavaScript Ajax组件库
Sep 16 Javascript
Vue 设置axios请求格式为form-data的操作步骤
Oct 29 Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 Javascript
js+canvas实现纸牌游戏
Mar 16 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 连接mysql连接被重置的解决方法
2011/02/15 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
php命令行写shell实例详解
2018/07/19 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
不安全的常用的js写法
2009/09/15 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python 内置函数complex详解
2016/10/23 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python中调试或排错的五种方法示例
2019/09/12 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
骨干教师考核方案
2014/05/09 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
2015年读书月活动总结
2015/03/26 职场文书
接收函
2019/04/22 职场文书