vue登录密码强度校验

24 篇文章 0 订阅

在这里插入图片描述

<template>
    <div>
        <el-form ref="psdform" :model="form" :rules="rules" label-width="120px">
            <el-form-item label="新密码:" prop="newPassword">
                <el-input
                :type="newPsdtype"
                v-model="form.newPassword"
                placeholder="8-16位密码,区分大小写"
                >
                    <span slot="suffix" class="show_pwd" @click="showPwd">
                        <svg-icon
                        :icon-class="newPsdtype == 'password' ? 'eye' : 'eye-open'"
                        />
                    </span>
                </el-input>

                <div class="intensity">
                    <span class="psdText">密码强度</span>
                    <span
                        class="line"
                        :class="[level.includes('low') ? 'low' : '']"
                    ></span>
                    <span
                        class="line"
                        :class="[level.includes('middle') ? 'middle' : '']"
                    ></span>
                    <span
                        class="line"
                        :class="[level.includes('high') ? 'high' : '']"
                    ></span>
                    <div class="warningtext">
                        密码应由8-16位数字、字母、符号组成。请不要使用容易被猜到的密码
                    </div>
                </div>
            </el-form-item>
            <el-form-item label="确认密码:" prop="confirmPassword">
                <el-input
                :type="confirmPsdtype"
                v-model="form.confirmPassword"
                placeholder="确认密码"
                >
                <span slot="suffix" class="show_pwd" @click="showconfirmPwd">
                    <svg-icon
                    :icon-class="confirmPsdtype == 'password' ? 'eye' : 'eye-open'"
                    /> </span
                 ></el-input>
            </el-form-item>
        </el-form>
    </div>

</template>
<script>
export default {
    data() {
        return {
        form: {
            newPassword: '',
            confirmPassword: ''
        },
        rules: {
            newPassword: [
            { required: true, validator: this.checkPassword, trigger: 'change' }
            ],
            confirmPassword: [
            {
                required: true,
                validator: this.checkConfirmPassword,
                trigger: 'blur'
            }
            ],
        },
        level: []
        }
  },
  methods: {
        //点击小眼睛
        showPwd() {
            if (this.newPsdtype === 'password') {
                this.newPsdtype = ''
            } else {
                this.newPsdtype = 'password'
            }
        },
        //点击小眼睛
        showconfirmPwd() {
            if (this.confirmPsdtype === 'password') {
                this.confirmPsdtype = ''
            } else {
                this.confirmPsdtype = 'password'
            }
        },
        // 校验密码
        checkPassword(rule, value, callback) {
            this.level = []
            if (!value) {
                return callback('密码不能为空')
            }
            if (value.length < 8) {
                return callback('密码不少于8位')
            }
            if (value.length > 16) {
                return callback('密码不大于16位')
            }
            // 校验是数字
            const regex1 = /^\d+$/
            // 校验字母
            const regex2 = /^[A-Za-z]+$/
            // 校验符号
            const regex3 =
            /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、]+$/
            if (regex1.test(value)) {
                this.level.push('low')
            } else if (regex2.test(value)) {
                this.level.push('low')
            } else if (regex3.test(value)) {
                this.level.push('low')
            } else if (/^[A-Za-z\d]+$/.test(value)) {
                this.level.push('low')
                this.level.push('middle')
            } else if (
                /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、\d]+$/.test(
                    value
                )
            ) {
                this.level.push('low')
                this.level.push('middle')
            } else if (
                /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、A-Za-z]+$/.test(
                    value
                )
            ) {
                this.level.push('low')
                this.level.push('middle')
            } else if (
                /^[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、A-Za-z\d]+$/.test(
                    value
                )
            ) {
            this.level.push('low')
            this.level.push('middle')
            this.level.push('high')
            }
            return callback()
        },
        // 确认密码
        checkConfirmPassword(rule, value, callback) {
            if (!value) {
                return callback('请输入确认密码')
            }
            if (value != this.form.newPassword) {
                return callback('两次密码输入不一致,请重新输入')
            }
        },
  }
}
</script>
<style>
.show_pwd {
  cursor: pointer;
  user-select: none;
  padding-right: 5px;
}
.intensity {
  
}
.psdText {
font-size: 14px;
margin-right: 10px;
}
.line {
display: inline-block;
width: 48px;
height: 4px;
background: #d8d8d8;
border-radius: 3px;
margin-right: 8px;
}
.low {
    background: #f4664a;
}
.middle {
    background: #ffb700;
}
.high {
    background: #2cbb79;
}
.level {
margin: 0 16px 0 8px;
}
.warningtext {
color: #5a5a5a;
font-size: 12px;
margin-top: 5px;
}


</style>

转自:https://blog.csdn.net/qq_45093219/article/details/125207932

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值