vue.js+ElementUI实现进度条提示密码强度效果


Posted in Javascript onJanuary 18, 2020

要求一:判断输入的字符串是否包含数字、小写字母、大写字母以及特殊字符四种内容的8-20位字符

通过搜索了解到可以使用?=这个正则语法判断字符串中是否含有多种内容。(?=)这个语法结构在正则里表示“设定后面是”的意思,举下面几个例子进一步了解?=这个语法:

(?=.*[a-zA-Z])  这句的意思就是后面必须有一位大写或小写字母

(?=.*[1-9]) 这句的意思是后面必须有一位数字

(?=.*[\W]) 这句的意思是后面必须有一个非字母数字及下划线的特殊符号

(?!.*[\u4E00-\u9FA5]) 这句的意思是后面不能有汉字

. 表示匹配除“\n”之外的任何单个字符。若要匹配包括“\n”在内的任意字符,请使用诸如“[\s\S]”之类的模式。

* 表示零次或多次匹配前面的字符或子表达式。例如,to* 匹配“t”和“too”。* 等效于 {0,}。

得出正则表达式:(?=.*[a-z])(?=.*[A-Z])(?=.*[1-9])(?=.*[\W])(?!.*[\u4E00-\u9FA5]).{8,20}

使用if (value.match(/(?=.*[a-z])(?=.*[A-Z])(?=.*[1-9])(?=.*[\W])(?!.*[\u4E00-\u9FA5]).{8,20}/)==null) 判断即可

要求二:判断输入的字符串是否包含数字、小写字母、大写字母以及特殊字符四种中至少三种的8-20位字符

本次使用vue.js+ElementUI实现判断密码强度并用进度条样式进行提示强度是否符合

先编写界面代码:

<div>
 <el-form :model="registerFormData" ref="registerForm" :rules="rules">
 <el-form-item label="密码" :label-width="formLabelWidth" prop="password">
 <el-input show-password type="password" v-model="registerFormData.password" autocomplete="off" placeholder="8-20位字符在数字、小写、大写字母以及特殊字符中四选三"></el-input>
 <el-progress :percentage="passwordPercent" :format="passwordPercentFormat"></el-progress>
 </el-form-item>
 <el-form-item label="再次输入密码" :label-width="formLabelWidth" prop="comfirmPassword">
 <el-input v-model="registerFormData.comfirmPassword" autocomplete="off"></el-input>
 </el-form-item>
 </el-form>
 </div>

然后在vue的data中定义需要用到的变量,编写并绑定密码和再次输入密码框的验证规则函数

data(){
 const validatePassword = (rule, value, callback) => {
 if (value === '') {
  callback(new Error('请输入密码'));
 } else {
  //6-20位包含字符、数字和特殊字符
  var ls = 0;
  if (this.registerFormData.password !== '') {
  if(this.registerFormData.password.match(/([a-z])+/)){
  ls++;
  }
  if(this.registerFormData.password.match(/([0-9])+/)){
  ls++;
  }
  if(this.registerFormData.password.match(/([A-Z])+/)){
  ls++;
  }
  if(this.registerFormData.password.match(/([\W])+/) && !this.registerFormData.password.match(/(![\u4E00-\u9FA5])+/)){  ls++;
  }
  if(this.registerFormData.password.length<6 || this.registerFormData.password.length>20 ){
  callback(new Error('要求6-20位字符'));
  ls=0;
  }
  if(this.registerFormData.password.match(/([\u4E00-\u9FA5])+/)){
  callback(new Error('不能包含中文字符'));
  ls=0;
  }
  switch (ls) {
  case 0: this.passwordPercent = 0;callback(new Error('数字、小写字母、大写字母以及特殊字符中四选三'));break;
  case 1: this.passwordPercent = 33;callback(new Error('数字、小写字母、大写字母以及特殊字符中四选三'));break;
  case 2: this.passwordPercent = 66;callback(new Error('数字、小写字母 、大写字母以及特殊字符中四选三'));break;
  case 3:
  case 4: this.passwordPercent = 100;break;
  default: this.passwordPercent = 0;break;
  }
  }
  callback();
 }
 };
 const validateConfirmPassword = (rule, value, callback) => {
 if (value === '') {
  callback(new Error('请输入密码'));
 } else {
  if (this.registerFormData.comfirmPassword !== this.registerFormData.password) {
  callback(new Error('两次输入的密码不一致'));
  // this.$refs.ruleForm.validateField('checkPass');
  }
  callback();
 }
 };
 return{
 passwordPercent:0,
 //表单变量
 registerFormData: {
  password:'',
  comfirmPassword: '',
 },
 formLabelWidth: '120px'
 },
 rules: {
  password:[
  {required: true, validator: validatePassword, trigger: ['blur', 'change'] },
  ],
  comfirmPassword:[
  {required: true, validator: validateConfirmPassword, trigger: ['blur', 'change'] }
  ],
 },
}

接着编写,ElementUI中的进度条判断函数,即<el-progress :percentage="passwordPercent" :format="passwordPercentFormat">这句界面代码中format绑定的函数       

passwordPercentFormat(percentage){
 return percentage === 100 ? '符合' : `不符`;
 }

最后可以通过css调整一下输入框的长度

<style scoped>
.el-form-item{
 width: 500px;
}
</style>

这样就可以实现使用进度条提示密码强度的效果

vue.js+ElementUI实现进度条提示密码强度效果

vue.js+ElementUI实现进度条提示密码强度效果

vue.js+ElementUI实现进度条提示密码强度效果

vue.js+ElementUI实现进度条提示密码强度效果

vue.js+ElementUI实现进度条提示密码强度效果

附上:

判断字符串是否符合手机号码规范/^1[34578]\d{9}$/

ps:下面给大家分享vue + elementUi 实现密码校验

<el-form-item v-else label="密码" label-width='150px' prop="password">
  <el-input :placeholder="info.password" v-model="info.password" style="width: 500px"></el-input>
</el-form-item>
<el-form-item v-else label="确认密码" label-width='150px' prop="repassword">
  <el-input :placeholder="info.repassword" v-model="info.repassword" style="width: 500px"></el-input>
</el-form-item>
data() {
  var validatePass2 = (rule, value, callback) => {
   if (value === '') {
    callback(new Error('请再次输入密码'))
   } else if (value !== this.info.password) {
    callback(new Error('两次输入密码不一致!'))
   } else {
    callback()
   }
  }
  return {
   info: {
   },
   rules: {
    password: [
     { required: true, message: '请输入密码', trigger: 'blur' },
     { pattern: /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,30}$/, message: '密码为数字,小写字母,大写字母,特殊符号 至少包含三种,长度为 8 - 30位,密码不能包含 用户名,公司名称(lidian), 公司域名(rekoon) (判断的时候不区分大小写)' }
    ],
    repassword: [
     { required: true, validator: validatePass2, trigger: 'blur' }
    ]
   }
  }
 },

总结

以上所述是小编给大家介绍的vue.js+ElementUI实现进度条提示密码强度效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
Jan 06 Javascript
js中settimeout方法加参数
Feb 28 Javascript
javascript实现五星评分功能
Nov 10 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 Javascript
通过npm引用的vue组件使用详解
Mar 02 Javascript
JS排序之选择排序详解
Apr 08 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
使用vue实现grid-layout功能实例代码
Jan 05 Javascript
浅析node.js的模块加载机制
May 25 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
vue实现输入一位数字转汉字功能
Dec 13 Javascript
JS数组方法concat()用法实例分析
Jan 18 #Javascript
JS实现纵向轮播图(初级版)
Jan 18 #Javascript
JS数组方法reverse()用法实例分析
Jan 18 #Javascript
JS实现横向轮播图(初级版)
Jun 24 #Javascript
JS数组方法shift()、unshift()用法实例分析
Jan 18 #Javascript
微信小程序开发中var that =this的用法详解
Jan 18 #Javascript
JavaScript实现滑动门效果
Jan 18 #Javascript
You might like
用libTemplate实现静态网页的生成
2006/10/09 PHP
php5.2.0内存管理改进
2007/01/22 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
简述Jquery与DOM对象
2015/07/10 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
微信小程序之选项卡的实现方法
2017/09/29 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python生成带有表格的图片实例
2019/02/03 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
pandas实现导出数据的四种方式
2020/12/13 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
Linux上比较文件的命令都有哪些
2013/09/28 面试题
如何安装ruby on rails
2014/02/09 面试题
小学运动会表扬稿
2014/01/19 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
基石观后感
2015/06/12 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
一文搞懂Redis中String数据类型
2022/04/03 Redis