vue elment-ui 密码强度提示的两种方式_elenemt ui密码输入显示强中弱

最后

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

        const validatePassword = (rule, value, callback) => {
            if (value !== this.form.newpassword) {
                callback(new Error('请确认新密码'))
            } else {
                callback()
            }
        }
        return {
            num: 0,
            gauge:null,
            form: {
                password: '',
                newpassword: "",
                checkpassword: ''
            },
            rules: {
                password: [{
                    required: true,
                    message: '请输入原密码',
                    trigger: 'blur'
                }],
                newpassword: [{
                        required: true,
                        message: '请输入新密码',
                        trigger: 'blur'
                    },
                    {
                        min: 3,
                        max: 18,
                        trigger: 'blur',
                        message: '密码长度为3到18位'
                    }
                ],
                checkpassword: [{
                        required: true,
                        message: '请输入新密码',
                        trigger: 'blur'
                    },
                    {
                        validator: validatePassword
                    }
                ]
            }
        }
    },
    mounted() {
        const ticks = [0, 1 / 3, 2 / 3, 1];
        const color = ['#F4664A', '#FAAD14', '#30BF78'];
        this.gauge = new Gauge('container', {
          percent: this.num,
          innerRadius: 0.75,
          type: 'meter',
          // 自定义 meter 总步数 以及 step 占比
          meter: {
            steps: 100,
                stepRatio: 1,
          },
          range: {
            ticks: [0, 1],
            color: ['l(0) 0:#F4664A 0.5:#FAAD14 1:#30BF78'],
          },
          indicator: {
            pointer: {
              style: {
                stroke: '#D0D0D0',
              },
            },
            pin: {
              style: {
                stroke: '#D0D0D0',
              },
            },
          },
          statistic: {
            title: {
              formatter: ({ percent }) => {
                if (percent < ticks[1]) {
                  return '弱';
                }
                if (percent < ticks[2]) {
                  return '中';
                }
                return '优';
              },
              style: ({ percent }) => {
                return {
                  fontSize: '20px',
                  lineHeight: 1,
                  color: percent < ticks[1] ? color[0] : percent < ticks[2] ? color[1] : color[2],
                };
              },
            },
            content: {
              offsetY: 36,
              style: {
                fontSize: '24px',
                color: '#4B535E',
              },
              formatter: () => '密码强度',
            },
          },
        });

        this.gauge.render();
    },
    methods: {
        checkStrong(value) {
            let q = 0;
            let flag = false;
            let lowerNum = 0;
            for (let i in value) {
                var asc = value.charCodeAt(i);
                if ((asc >= 97 && asc <= 122)) {
                    if (!flag) {
                        q = q + 1;
                        flag = true;
                    }
                    lowerNum = lowerNum + 1;
                }
            }
            flag = false;
            let upperNum = 0;
            for (let i in value) {
                var asc = value.charCodeAt(i);
                if ((asc >= 65 && asc <= 90)) {
                    if (!flag) {
                        q = q + 1;
                        flag = true;
                    }
                    upperNum = upperNum + 1;
                }
            }
            flag = false;
            let numberNum = 0;
            for (let i in value) {
                var asc = value.charCodeAt(i);
                if ((asc >= 48 && asc <= 57)) {
                    if (!flag) {
                        q = q + 1;
                        flag = true;
                    }
                    numberNum = numberNum + 1;
                }
            }
            flag = false;
            let otherNum = 0;
            for (let i in value) {
                var asc = value.charCodeAt(i);
                if (!(asc >= 48 && asc <= 57 || asc >= 65 && asc <= 90 || asc >= 97 && asc <= 122)) {
                    if (!flag) {
                        q = q + 1;
                        flag = true;
                    }
                    otherNum = otherNum + 1;
                }
            }
            let rate = 0;
            let num = 0;
            switch (q) {
                case 1:
                    num = 0;rate=33/20;
                    break;
                case 2:
                    num =33;rate=50/20;
                    break;
                case 3:
                    num =50;rate=66/20;
                    break;
                case 4:
                    num = 66;rate=100/20;
                    break;
            }


            num = (num + ((lowerNum + upperNum + numberNum + otherNum) *rate )) / 100;
            switch (q) {
                case 1:
                    num > 0.33 ? num = 0.33 : num = num;
                    break;
                case 2:
                    num > 0.50 ? num = 0.50 : num < 0.34 ? num = 0.34 : num = num;
                    break;
                case 3:
                    num > 0.66 ? num = 0.66 : num < 0.51 ? num = 0.51 : num = num;
                    break;
                case 4:
                    num > 1 ? num = 1 : num < 0.67 ? num = 0.67 : num = num;
                    break;
            }
            return num
        },
        newpasswordchange(e) {
            this.num = this.checkStrong(e)
            this.gauge.changeData(this.num);
        },
    }
}

##  **第三种方法、**


判断规则用了这个[密码强度判断规则(仿google)\_erice的博客-CSDN博客](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)


前面评分规则差不太多,后面评分等级作了修改:


小于10:密码强度不合格,10-25:弱,25-35:中,35以上:强


![](https://img-blog.csdnimg.cn/20210805110138974.gif)


**主要code:**



      <div class="passwordstrength">
        <div class="level1" :style="{'background-color':(score>=10&&score<25)?'#FC5F76':((score>=25&&score<35)?'#FF9900':(score>=35?'#33CC00':'#BBBBBB'))}"></div>
        <div class="level2" :style="{'background-color':((score>=25&&score<35)?'#FF9900':(score>=35?'#33CC00':'#BBBBBB'))}"></div>
        <div class="level3" :style="{'background-color':score>=35?'#33CC00':'#BBBBBB'}"></div>
      </div>
      <input type="password" placeholder="请输入您的密码" v-model="newpassword" maxlength="16" @input="passwordcomplex()" />

**注解:**


整体按照前面链接给出的判断规则来的,根据是否存在数字,是否存在大小写字母,是否存在特殊字符来进行打分,有连续的情况扣分,我还单独加了一个规则,如果整个密码都是连续的,分数直接扣为0。


接下来上js代码,函数返回的是最后的得分:



passwordcomplex(){
  let passwordscore = 0
  let pwdArr = this.newpassword.split('');
  console.log(pwdArr);
  // pwdLen长度
  if(pwdArr.length>4&&pwdArr.length<=7){  //长度在4-7之间,加五分
    passwordscore += 5
  }else if(pwdArr.length>7){  //长度在7以上,加10分
    passwordscore += 10
  }
  // letter字母
  if(pwdArr.some(item => {return /^[a-z]$/.test(item)})){  //是否存在小写字母
    if(pwdArr.some(item => {return /^[A-Z]$/.test(item)})){  //是否存在大写字母
      passwordscore += 10   //大小写都有,加10,否则加5
    }else{
      passwordscore += 5
    }
  }else if(pwdArr.some(item => {return /^[A-Z]$/.test(item)})){
    passwordscore += 5
  }
  //num数字
  if(pwdArr.some(item => {return /^[0-9]$/.test(item)})){ //判断是否存在数字
    let count = 0
    pwdArr.forEach(item => {   //判断数字出现的次数
      if(/^[0-9]$/.test(item)){
        count++
      }
    })
    if(count>=3){  //出现大于等于3次,加10,否则加5
      passwordscore += 10;
    }else{
      passwordscore += 5;
    }
  }
  //special特殊字符
  if(pwdArr.some(item => {return /^[\^%&'*.,;=+\-?@#!$\x22]$/.test(item)})){ //判断是否存在特殊字符
    let count = 0
    pwdArr.forEach(item => {  //特殊字符出现次数
      if(/^[\^%&'*.,;=+\-?@#!$\x22]$/.test(item)){
        count++
      }
    })
    console.log('count',count);
    if(count>=2){
      passwordscore += 15;  //出现两次以上加15,否则加5
    }else{
      passwordscore += 5;
    }
  }
  //是否连续
  let isContinued = false;

总结

为了帮助大家更好温习重点知识、更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

前端面试题汇总

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

JavaScript

性能

linux

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值