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 相关文章推荐
如果文字过长,则将过长的部分变成省略号显示
Jun 26 Javascript
Jquery Ajax的Get方式时需要注意URL地方
Apr 07 Javascript
AngularJS入门教程(一):静态模板
Dec 06 Javascript
利用Jquery队列实现根据输入数量显示的动画
Sep 01 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
Dec 25 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
Mar 06 Javascript
node.js实现的装饰者模式示例
Sep 06 Javascript
一次记住JavaScript的6个正则表达式方法
Feb 22 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
Apr 10 Javascript
js实现淘宝首页的banner栏效果
Nov 26 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python对象转JSON字符串的方法
2016/04/27 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
python适合做数据挖掘吗
2020/06/16 Python
python中如何设置代码自动提示
2020/07/15 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
参观考察邀请函范文
2014/01/29 职场文书
公司宣传语大全
2015/07/13 职场文书
暑假打工感想
2015/08/07 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
课改心得体会范文
2016/01/25 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python