lzhe
2024-06-06 a2441175073f8b09a7eff29effd7e3e617de2f7d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<!--
 * @Descripttion: 密码强度检测
 * @version: 1.0
 * @Author: sakuya
 * @Date: 2022年6月2日15:36:01
 * @LastEditors:
 * @LastEditTime:
-->
 
<template>
    <div class="sc-password-strength">
        <div class="sc-password-strength-bar" :class="`sc-password-strength-level-${level}`"></div>
    </div>
</template>
 
<script>
    export default {
        props: {
            modelValue: { type: String, default: "" },
        },
        data() {
            return {
                level: 0
            }
        },
        watch: {
            modelValue() {
                this.strength(this.modelValue)
            }
        },
        mounted() {
            this.strength(this.modelValue)
        },
        methods: {
            strength(v){
                var _level = 0
                //长度
                var has_length = v.length >= 6
                //包含数字
                var has_number = /\d/.test(v)
                //包含小写英文
                var has_lovercase = /[a-z]/.test(v)
                //包含大写英文
                var has_uppercase = /[A-Z]/.test(v)
                //没有连续的字符3位
                var no_continuity = !/(\w)\1{2}/.test(v)
                //包含特殊字符
                var has_special = /[`~!@#$%^&*()_+<>?:"{},./;'[\]]/.test(v)
 
                if(v.length <= 0){
                    _level = 0
                    this.level = _level
                    return false
                }
                if(!has_length){
                    _level = 1
                    this.level = _level
                    return false
                }
                if(has_number){
                    _level += 1
                }
                if(has_lovercase){
                    _level += 1
                }
                if(has_uppercase){
                    _level += 1
                }
                if(no_continuity){
                    _level += 1
                }
                if(has_special){
                    _level += 1
                }
                this.level = _level
            }
        }
    }
</script>
 
<style scoped>
    .sc-password-strength {height: 5px;width: 100%;background: var(--el-color-info-light-5);border-radius: 5px;position: relative;margin:10px 0;}
    .sc-password-strength:before {left: 20%;}
    .sc-password-strength:after {right: 20%;}
    .sc-password-strength:before, .sc-password-strength:after {position: absolute;content: "";display: block;width: 20%;height: inherit;border: 5px solid var(--el-bg-color-overlay);border-top: 0;border-bottom: 0;z-index: 1;background-color: transparent;box-sizing: border-box;}
    .sc-password-strength-bar {position: absolute;height: inherit;width: 0%;border-radius: inherit;transition: width .5s ease-in-out,background .25s;background: transparent;}
    .sc-password-strength-level-1 {width: 20%;background-color: var(--el-color-error);}
    .sc-password-strength-level-2 {width: 40%;background-color: var(--el-color-error);}
    .sc-password-strength-level-3 {width: 60%;background-color: var(--el-color-warning);}
    .sc-password-strength-level-4 {width: 80%;background-color: var(--el-color-success);}
    .sc-password-strength-level-5 {width: 100%;background-color: var(--el-color-success);}
</style>