原生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常见开发技巧详细整理
Jan 02 Javascript
用js的for循环获取radio选中的值
Oct 21 Javascript
jquery跟js初始化加载的多种方法及区别介绍
Apr 02 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
jQuery Easyui datagrid连续发送两次请求问题
Dec 13 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
jQuery菜单实例(全选,反选,取消)
Aug 28 jQuery
javascript变量提升和闭包理解
Mar 12 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
Dec 06 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
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
截获网站title标签之家内容的例子
2006/10/09 PHP
一个简单的PHP&amp;MYSQL留言板源码
2020/07/19 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
javascript中arguments,callee,caller详解
2016/03/16 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
详解javascript void(0)
2020/07/13 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python中实现词云图的示例
2020/12/19 Python
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
电子商务专业自我鉴定
2013/12/18 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
入职担保书范文
2014/05/21 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
工程项目合作意向书
2015/05/08 职场文书
政工师工作总结2015
2015/05/26 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技