密码正则校验

This commit is contained in:
yy 2024-06-03 14:10:20 +08:00
parent 04c78723ee
commit a44ae3433d
4 changed files with 218 additions and 205 deletions

View File

@ -14,7 +14,8 @@
<el-form ref="formRef" :model="formData" :rules="rules" label-width="60">
<template v-if="tabActive === 0">
<el-upload action="#" :limit="1" :http-request="handleUpload" ref="uploadRef"
:show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
:show-file-list="false" :on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload">
<img v-if="formData.avatar" :src="'/api' + formData.avatar" class="avatar"/>
<img v-else src="@/assets/imgs/home/avatar.png" class="avatar"/>
</el-upload>
@ -33,10 +34,12 @@
</template>
<template v-else>
<el-form-item label="密码" prop="password" label-width="100">
<el-input v-model="formData.password" type="password" show-password placeholder="请输入密码"></el-input>
<el-input v-model="formData.password" type="password" show-password
placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item label="新密码" prop="newPassword" label-width="100">
<el-input v-model="formData.newPassword" type="password" show-password placeholder="请输入新密码"></el-input>
<el-input v-model="formData.newPassword" type="password" show-password
placeholder="请输入新密码"></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword" label-width="100">
<el-input v-model="formData.confirmPassword" type="password" show-password
@ -45,7 +48,10 @@
</template>
</el-form>
<div class="submit-box">
<el-button type="primary" @click="submitForm">{{ tabActive === 0 ? '更新个人信息' : '修改密码' }}</el-button>
<el-button type="primary" @click="submitForm">{{
tabActive === 0 ? '更新个人信息' : '修改密码'
}}
</el-button>
</div>
</div>
</template>
@ -57,6 +63,7 @@ import {ElMessage} from 'element-plus'
import {editPassword, getUserInfo, updateUserInfo} from "@/api/user";
import {handleHttpUpload} from "@/api/file-upload";
import {useUserStore} from "@/stores/user-info-store";
import {REGEXP} from "@/enum/log-enum";
const emit = defineEmits(['close'])
@ -87,22 +94,20 @@ const validatePassword = (rule: any, value: any, callback: any) => {
//
const validatorPassword = (rule: any, value: any, callback: any) => {
if (value.length >= 6) {
callback();
if (!(new RegExp(REGEXP.PASSWORD).test(value))) {
callback("8~16位字母或数字区分大小写");
} else {
callback(new Error('密码长度至少6位'));
callback()
}
}
const validatorPhone = (rule: any, value: any, callback: any) => {
var isPhone = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;
if (value.indexOf('****') >= 0) {
return callback().trim();
}
if (!isPhone.test(value)) {
if (!new RegExp(REGEXP.PHONE).test(value)) {
callback(new Error('请输入合法手机号'));
} else {
callback();
@ -128,6 +133,7 @@ const rules = reactive({
],
confirmPassword: [
{required: true, message: '请输入密码', trigger: 'change'},
{required: true, validator: validatorPassword, trigger: 'change'},
{validator: validatePassword, trigger: 'blur'}
]
})
@ -146,6 +152,7 @@ const formData = ref({
const close = () => {
emit('close')
}
function handleAvatarSuccess(uploadFile: any) {
}

View File

@ -5,3 +5,9 @@ export enum LogTypeEnum {
MODIFY = "3",
EXCEPTION = '4',
}
export enum REGEXP {
PASSWORD = '^[a-zA-Z0-9]{8,16}$',
ACCOUNT = '^[a-zA-Z0-9]{2,16}$',
PHONE = '^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$'
}

View File

@ -82,7 +82,8 @@
<el-form ref="registerFormRef" :model="registerParams" :rules="registerRules" label-width="100">
<el-form-item label="用户名" prop="username">
<el-input v-model="registerParams.username" placeholder="请输入用户名2~16位字母或数字区分大小写"></el-input>
<el-input v-model="registerParams.username"
placeholder="请输入用户名2~16位字母或数字区分大小写"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="registerParams.password" type="password" show-password
@ -143,6 +144,7 @@ import SliderVerify from "@/components/SliderVerify/index.vue";
import * as loginApi from "@/api/login";
import {Session} from "@/utils/storage";
import * as hospitalApi from "@/api/hospital";
import {REGEXP} from "@/enum/log-enum";
//
@ -256,7 +258,7 @@ onMounted(() => {
})
function validatePass2(rule: any, value: any, callback: any) {
if (!(/^[a-zA-Z0-9]{8,16}$/.test(value))) {
if (!(new RegExp(REGEXP.PASSWORD).test(value))) {
callback("8~16位字母或数字区分大小写");
} else if (value !== registerParams.value.password) {
callback(new Error('两次密码不一致'));
@ -266,7 +268,7 @@ function validatePass2(rule: any, value: any, callback: any) {
}
function validateAccount(rule: any, value: any, callback: any) {
if (!(/^[a-zA-Z0-9]{2,16}$/.test(value))) {
if (!(new RegExp(REGEXP.ACCOUNT).test(value))) {
callback("2~16位字母或数字区分大小写");
} else {
callback()

View File

@ -70,6 +70,7 @@ import {onMounted, reactive, ref, toRefs, watch} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getRoleList} from "@/api/role";
import {addUser, updateUI} from "@/api/user";
import {REGEXP} from "@/enum/log-enum";
const emit = defineEmits(['close', 'save'])
@ -80,13 +81,10 @@ const props = defineProps({
const roleOption = ref<any>([])
const validatorPhone = (rule: any, value: any, callback: any) => {
var isPhone = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;
if (value.indexOf('****') >= 0) {
return callback().trim();
}
if (!isPhone.test(value)) {
if (!new RegExp(REGEXP.PHONE).test(value)) {
callback(new Error('请输入合法手机号'));
} else {
callback();
@ -149,7 +147,7 @@ defineExpose({
})
function validatePass2(rule: any, value: any, callback: any) {
if (!(/^[a-zA-Z0-9]{8,16}$/.test(value))) {
if (!(new RegExp(REGEXP.PASSWORD).test(value))) {
callback("8~16位字母或数字区分大小写");
} else if (value !== formData.value.password) {
callback(new Error('两次密码不一致'));
@ -159,7 +157,7 @@ function validatePass2(rule: any, value: any, callback: any) {
}
function validateAccount(rule: any, value: any, callback: any) {
if (!(/^[a-zA-Z0-9]{2,16}$/.test(value))) {
if (!(new RegExp(REGEXP.ACCOUNT).test(value))) {
callback("2~16位字母或数字区分大小写");
} else {
callback()