原生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各浏览器中option元素的表现差异
Apr 07 Javascript
自动刷新网页,自动刷新当前页面,JS调用
Jun 24 Javascript
javascript分页代码实例分享(js分页)
Dec 13 Javascript
javascript计算用户打开网页的停留时间
Jan 09 Javascript
根据配置文件加载js依赖模块
Dec 29 Javascript
js常用系统函数用法实例分析
Jan 12 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
Jan 20 Javascript
全面解析bootstrap格子布局
May 22 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 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
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
JavaScript Prototype对象
2009/01/07 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
animate.css在vue项目中的使用教程
2018/08/05 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
详解python如何引用包package
2020/06/07 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
临床医学专业个人的自我评价
2013/09/27 职场文书
技术副厂长岗位职责
2013/12/26 职场文书
护理专业求职信
2014/06/15 职场文书
公司应聘求职信
2014/06/21 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
教师三严三实心得体会
2014/10/11 职场文书
公司租车协议书
2015/01/29 职场文书
入团介绍人意见范文
2015/06/04 职场文书
文化大革命观后感
2015/06/17 职场文书