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 相关文章推荐
经验几则 推荐
Sep 05 Javascript
Javascript alert消息换行的方法
Aug 07 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
Mar 12 Javascript
JS SetInterval 代码实现页面轮询
Aug 11 Javascript
shiro授权的实现原理
Sep 21 Javascript
JavaScript实现精美个性导航栏筋斗云效果
Oct 29 Javascript
vue 实现在函数中触发路由跳转的示例
Sep 01 Javascript
移动端图片上传旋转、压缩问题的方法
Oct 16 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
ES2020 已定稿,真实场景案例分析
May 25 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
PHP的宝库目录--PEAR
2006/10/09 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
python映射列表实例分析
2015/01/26 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
详解python深浅拷贝区别
2019/06/24 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
自我鉴定标准格式
2014/03/19 职场文书
岗位廉政承诺书
2014/03/27 职场文书
小学一年级评语大全
2014/04/22 职场文书
火灾现场处置方案
2014/05/28 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
科技活动总结范文
2015/05/11 职场文书
小学运动会通讯稿
2015/07/18 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
vue递归实现树形组件
2022/07/15 Vue.js