export default {
data() {
function validatePasswordRule(password) {
// 检查密码长度
if (password.length < 8 || password.length > 25) {
return false;
}
// 定义字符类型的正则表达式
const hasDigit = /\d/;
const hasLetter = /[a-zA-Z]/;
const hasSymbol = /[^a-zA-Z\d]/;
// 检查每种字符类型是否存在
const containsDigit = hasDigit.test(password);
const containsLetter = hasLetter.test(password);
const containsSymbol = hasSymbol.test(password);
// 计算包含的字符类型数量
const typesCount = [containsDigit, containsLetter, containsSymbol].filter(Boolean).length;
return typesCount >= 3;
}
const validatePassword = (rule, value, callback) => {
if (!validatePasswordRule(value)) {
callback('密码格式错误')
} else {
callback()
}
}
return {
form:{},
rules: {
newPassword: [
{ required: true, validator: validatePassword, trigger: 'change' }
],
newPasswordW: [
{required: true, validator: this.validateConfirmPassword, trigger: 'change'}
],
mainGrade: [
{required: true, message: '年级不能为空', trigger: 'change'}
],
mainSubject: [
{
validator: (rule, value, callback) => {
if (value && value !== ''){
callback()
} else {
callback(new Error('学科不能为空'))
}
},
trigger: 'change'
}
]
}
}
},
methods:{
validateConfirmPassword(rule, value, callback) {
if (value !== this.form.newPassword) {
callback('两次输入的密码不一致');
} else {
callback();
}
},
}
}
vue密码由8~25位数字、字母或符号组成,至少含有3种及以上的字符,密码配置规则校验,vue自定义校验
于 2024-05-29 17:33:04 首次发布