密码强度效果

本文介绍了如何在Vue中创建一个用于检测密码强度的组件,通过计算属性根据输入的密码长度和包含的字符类型(数字、字母和特殊字符)动态显示安全等级。组件展示了不同强度等级的样式,并提供了一个简单的密码检查函数。
摘要由CSDN通过智能技术生成


一、第一种

规则

先展示效果
在这里插入图片描述
具体规则

  • 长度显最小8位
  • 需有字母大小写
  • 需有数字
  • 需有特殊字符(暂无限制字符类型)

实现

  • 定义组件password-strength.vue
<template>
  <div class="password-strength" v-if="input > -1">
    <b :style="{backgroundColor: strengthType.arr[0]}"></b>
    <b :style="{backgroundColor: strengthType.arr[1]}"></b>
    <b :style="{backgroundColor: strengthType.arr[2]}"></b>
    <b :style="{backgroundColor: strengthType.arr[3]}"></b>
    <b :style="{backgroundColor: strengthType.arr[4]}"></b>
    <span>
      {{ strengthType.tip }}
    </span>
  </div>
</template>
<script lang="ts">
import { computed } from 'vue'
export default {
  name: 'PasswordStrength',
  props: {
    modelValue: {
      type: Number,
      default: -1
    }, // 组件绑定值
  },
  setup(props, { emit }) {
    const input = computed({
      get() {
        return props.modelValue
      },
      set(val) {
        emit('update:modelValue', val)
      }
    })
    const strengthType = computed(() => {
      let result = {
        tip: '',
        arr: ['transparent', 'transparent', 'transparent', 'transparent', 'transparent']
      }
      switch (input.value) {
        case 0:
          result.arr[0] = 'red'
          result.tip = 'Unsafe'
          break;
        case 1:
          result.arr[0] = 'yellow'
          result.arr[1] = 'yellow'
          result.arr[2] = 'yellow'
          result.tip = 'Normal safety'
          break;
        case 2:
          result.arr[0] = 'yellow'
          result.arr[1] = 'yellow'
          result.arr[2] = 'yellow'
          result.arr[3] = 'yellow'
          result.tip = 'Normal safety'
          break;
        case 3:
          result.arr[0] = 'green'
          result.arr[1] = 'green'
          result.arr[2] = 'green'
          result.arr[3] = 'green'
          result.arr[4] = 'green'
          result.tip = 'Safety'
          break;
        default:
          break;
      }
      return result
    })
    return {
      input,
      fieldProperty,
      strengthType
    }
  },
}
</script>
<style lang="less" scoped>
.password-strength{
  b{
    float: left;
    width: 30px;
    height: 15px;
    border: 1px solid;
    margin: 5px 2px;
  }
  span{
    margin-left: 50px;
  }
 
}
</style>

  • 根据密码输入判断强度
const checkpassword = (password: string) => {
      let lvl = 0;//默认是0级
      if (!password || password.length < 8) return lvl;

      if (/[0-9]/.test(password)) { //密码中是否有数字,或者是字母,或者是特殊符号
          lvl++;
      }
      if (/[a-z]/.test(password)) { // 判断密码中有没有字母
          lvl++;
      }
      if (/[A-Z]/.test(password)) { // 判断密码中有没有字母
          lvl++;
      }

      var _spcialWord = password.replace(/[0-9]/g, '').replace(/[a-z]/g, '').replace(/[A-Z]/g, '').replace(/\s/g, '')
      if (_spcialWord && _spcialWord.length > 0) { // 判断密码中有没有特殊符号
          lvl++;
      }
      return lvl;// 最小的值是1,最大值是3
    }

总结

如有启发,可点赞收藏哟~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值