密码正则校验完善

This commit is contained in:
BianLzhaoMin 2024-09-04 16:31:50 +08:00
parent f14370ce9c
commit b6389c92c1
3 changed files with 121 additions and 75 deletions

View File

@ -89,6 +89,6 @@ export function isArray(arg) {
// 密码规则8-20位必须包含字母、数字、特殊字符中的两种 // 密码规则8-20位必须包含字母、数字、特殊字符中的两种
export function validPassword(str) { export function validPassword(str) {
const reg = /^((?=.*[A-Za-z])(?=.*\d)|(?=.*[A-Za-z])(?=.*[!@#$%^&*()_+\-\=])|(?=.*\d)(?=.*[!@#$%^&*()_+\-\=]))[A-Za-z\d!@#$%^&*()_+\-\=]{8,20}$/ const reg = /^(?!.*(?:111|888|123|234|345|456|567|678|789|1234|2345|3456|4567|5678|6789|12345|23456|34567|45678|56789|abc|abcd|abcde|abcdef|abcdefg|qwe|qwer|qwert|qwerty|asdf|asdfg|asdfgh|password|passw0rd|letmein|welcome|admin|user|test|pass|root|login))(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()_+{}\[\]:;"'|\\,.<>\/?~-]).{8,16}$/
return reg.test(str) return reg.test(str)
} }

View File

@ -836,8 +836,10 @@ export default {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
closeOnClickModal: false, closeOnClickModal: false,
inputPattern: /^.{5,20}$/, inputPattern:
inputErrorMessage: '用户密码长度必须介于 5 和 20 之间', /^(?!.*(?:111|888|123|234|345|456|567|678|789|1234|2345|3456|4567|5678|6789|12345|23456|34567|45678|56789|abc|abcd|abcde|abcdef|abcdefg|qwe|qwer|qwert|qwerty|asdf|asdfg|asdfgh|password|passw0rd|letmein|welcome|admin|user|test|pass|root|login))(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()_+{}\[\]:;"'|\\,.<>\/?~-]).{8,16}$/,
inputErrorMessage:
'请设置8到16位由字母、数字、特殊字符3种组合且数字不可连续的密码',
}) })
.then(({ value }) => { .then(({ value }) => {
const password = encrypt(value) const password = encrypt(value)

View File

@ -1,33 +1,57 @@
<template> <template>
<el-form ref="form" :model="user" :rules="rules" label-width="80px"> <el-form ref="form" :model="user" :rules="rules" label-width="80px">
<el-form-item label="旧密码" prop="oldPassword"> <el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/> <el-input
v-model="user.oldPassword"
placeholder="请输入旧密码"
type="password"
show-password
/>
</el-form-item> </el-form-item>
<el-form-item label="新密码" prop="newPassword"> <el-form-item label="新密码" prop="newPassword">
<el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password/> <el-input
v-model="user.newPassword"
placeholder="请输入新密码"
type="password"
show-password
/>
</el-form-item> </el-form-item>
<el-form-item label="确认密码" prop="confirmPassword"> <el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/> <el-input
v-model="user.confirmPassword"
placeholder="请确认新密码"
type="password"
show-password
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="mini" @click="submit">保存</el-button> <el-button type="primary" size="mini" @click="submit"
>保存</el-button
>
<el-button type="danger" size="mini" @click="close">关闭</el-button> <el-button type="danger" size="mini" @click="close">关闭</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<script> <script>
import { updateUserPwd } from "@/api/system/user"; import { updateUserPwd } from '@/api/system/user'
import { validPassword } from '@/utils/validate' import { validPassword } from '@/utils/validate'
import { encrypt } from '@/utils/jsencrypt.js' import { encrypt } from '@/utils/jsencrypt.js'
export default { export default {
data() { data() {
const passwordRegex = (rule, value, callback) => { const passwordRegex = (rule, value, callback) => {
if (value.length < 8 || value.length > 20) { if (
callback(new Error("密码长度在 8 到 20 个字符")); value.length < 8 ||
} else if (!validPassword(value)) { value.length > 16 ||
callback(new Error("密码须包含数字、字母、特殊符号中的两种以上")); !validPassword(value)
) {
callback(
new Error(
'请设置8到16位由字母、数字、特殊字符3种组合且数字不可连续的密码',
),
)
return false
} else if (this.user.oldPassword === value) { } else if (this.user.oldPassword === value) {
callback(new Error('新密码不能与旧密码相同')) callback(new Error('新密码不能与旧密码相同'))
} else { } else {
@ -36,48 +60,68 @@ export default {
} }
const equalToPassword = (rule, value, callback) => { const equalToPassword = (rule, value, callback) => {
if (this.user.newPassword !== value) { if (this.user.newPassword !== value) {
callback(new Error("两次输入的密码不一致")); callback(new Error('两次输入的密码不一致'))
} else { } else {
callback(); callback()
}
} }
};
return { return {
user: { user: {
oldPassword: undefined, oldPassword: undefined,
newPassword: undefined, newPassword: undefined,
confirmPassword: undefined confirmPassword: undefined,
}, },
// //
rules: { rules: {
oldPassword: [ oldPassword: [
{ required: true, message: "旧密码不能为空", trigger: "blur" } {
required: true,
message: '旧密码不能为空',
trigger: 'blur',
},
], ],
newPassword: [ newPassword: [
{ required: true, message: "新密码不能为空", trigger: "blur" }, {
{ required: true, validator: passwordRegex, trigger: "blur" } required: true,
message: '新密码不能为空',
trigger: 'blur',
},
{
required: true,
validator: passwordRegex,
trigger: 'blur',
},
], ],
confirmPassword: [ confirmPassword: [
{ required: true, message: "确认密码不能为空", trigger: "blur" }, {
{ required: true, validator: equalToPassword, trigger: "blur" } required: true,
] message: '确认密码不能为空',
trigger: 'blur',
},
{
required: true,
validator: equalToPassword,
trigger: 'blur',
},
],
},
} }
};
}, },
methods: { methods: {
submit() { submit() {
this.$refs["form"].validate(valid => { this.$refs['form'].validate((valid) => {
if (valid) { if (valid) {
const oldPassword = encrypt(this.user.oldPassword) const oldPassword = encrypt(this.user.oldPassword)
const newPassword = encrypt(this.user.newPassword) const newPassword = encrypt(this.user.newPassword)
updateUserPwd(oldPassword, newPassword).then(response => { updateUserPwd(oldPassword, newPassword).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess('修改成功')
}); })
} }
}); })
}, },
close() { close() {
this.$tab.closePage(); this.$tab.closePage()
} },
} },
}; }
</script> </script>