原生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 相关文章推荐
js 解决“options为空或不是对象”
Dec 22 Javascript
javaScript对文字按照拼音排序实现代码
Dec 27 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
JQ实现新浪游戏首页幻灯片
Jul 29 Javascript
jquery实现九宫格大转盘抽奖
Nov 13 Javascript
跟我学习javascript的最新标准ES6
Nov 20 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
javascript 产生随机数的几种方法总结
Sep 26 Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 Javascript
antd Upload 文件上传的示例代码
Dec 14 Javascript
解决vue v-for src 图片路径问题 404
Nov 12 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 5.0创建图形的巧妙方法
2010/10/12 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
PHP下载远程图片并保存到本地方法总结
2016/01/22 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
根据分辩率调用不同的CSS.
2007/01/08 Javascript
javascript cookies操作集合
2010/04/12 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
深入研究React中setState源码
2017/11/17 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
python颜色随机生成器的实例代码
2020/01/10 Python
python selenium操作cookie的实现
2020/03/18 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
打架检讨书400字
2014/01/17 职场文书
大一新生期末自我评价
2014/09/12 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
Python基本数据类型之字符串str
2021/07/21 Python
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL