原生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 脚本将当地时间转换成其它时区
Mar 19 Javascript
使用Math.floor与Math.random取随机整数的方法详解
May 07 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
Sep 09 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
Javascript 制作图形验证码实例详解
Dec 22 Javascript
Vue学习笔记进阶篇之单元素过度
Jul 19 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
自定义vue组件发布到npm的方法
May 09 Javascript
如何在微信小程序中实现Mixins方案
Jun 20 Javascript
javascript实现贪吃蛇小练习
Jul 05 Javascript
基于vue的video播放器的实现示例
Feb 19 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 和 MySQL 基础教程(三)
2006/10/09 PHP
隐性调用php程序的方法
2009/03/09 PHP
PHP制作用户注册系统
2015/10/23 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHP数组实例详解
2016/06/26 PHP
高效率JavaScript编写技巧整理
2013/08/23 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
javascript实用方法总结
2015/02/06 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
js实现随机数小游戏
2019/06/28 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[02:27]刀塔重生降临
2015/10/14 DOTA
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
python如何实现代码检查
2019/06/28 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
小班上学期评语
2014/05/05 职场文书
先进工作者个人总结
2015/02/15 职场文书
检察院起诉意见书
2015/05/20 职场文书
2015年学校团委工作总结
2015/05/26 职场文书