原生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 添加和移除函数的通用方法
Oct 20 Javascript
iframe父页面获取子页面参数的方法
Feb 21 Javascript
js实现每日自动换一张图片的方法
May 04 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
ECMAScript6变量的解构赋值实例详解
Sep 19 Javascript
Node.js Event Loop各阶段讲解
Mar 08 Javascript
小程序如何使用分包加载的实现方法
May 22 Javascript
详解Vue3 Composition API中的提取和重用逻辑
Apr 29 Javascript
解决vue 给window添加和移除resize事件遇到的坑
Jul 21 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中error与exception的区别及应用
2014/07/28 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
python在不同条件下的输入与输出
2020/02/13 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
工厂厂长岗位职责
2013/11/08 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
财务个人年度总结范文
2015/02/26 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers