fuyongxin
2026-06-03 e1c85ce94dc5a757a643bba076c7f5ea193f7e3f
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
/**
 * 密码强度规则
 * 根据参数 chrtype 动态生成校验规则
 *
 * chrtype 说明:
 *   0 - 任意字符(默认)
 *   1 - 纯数字(0-9)
 *   2 - 纯字母(a-z / A-Z)
 *   3 - 字母 + 数字(必须同时包含)
 *   4 - 字母 + 数字 + 特殊字符(必须同时包含,特殊字符:~!@#$%^&*()-=_+)
 */
import cache from '@/plugins/cache'
 
// 各类型对应的正则、错误提示
const PWD_RULES = {
  '0': { pattern: /^[^<>"'|\\]+$/, message: '密码不能包含非法字符:< > " \' \\ |' },
  '1': { pattern: /^[0-9]+$/, message: '密码只能为数字(0-9)' },
  '2': { pattern: /^[a-zA-Z]+$/, message: '密码只能为英文字母(a-z、A-Z)' },
  '3': { pattern: /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$/, message: '密码必须同时包含字母和数字' },
  '4': { pattern: /^(?=.*[A-Za-z])(?=.*\d)(?=.*[~!@#$%^&*()\-=_+])[A-Za-z\d~!@#$%^&*()\-=_+]+$/, message: '密码必须同时包含字母、数字和特殊字符(~!@#$%^&*()-=_+)' }
}
 
export default {
  data() {
    return {
      // 密码限制类型
      pwdChrType: cache.session.get('pwrChrtype') || '0'
    }
  },
  computed: {
    // 默认密码校验
    pwdValidator() {
      const rule = PWD_RULES[this.pwdChrType] || PWD_RULES['0']
      return [
        { required: true, message: '密码不能为空', trigger: 'blur' },
        { min: 6, max: 20, message: '密码长度必须介于 6 和 20 之间', trigger: 'blur' },
        { pattern: rule.pattern, message: rule.message, trigger: 'blur' }
      ]
    },
    // 校验prompt的inputValidator函数
    pwdPromptValidator() {
      const rule = PWD_RULES['0']
      return (value) => {
        if (!value || value.length < 6 || value.length > 20) {
          return '密码长度必须介于 6 和 20 之间'
        }
        if (!rule.pattern.test(value)) {
          return rule.message
        }
      }
    },
    // 个人中心密码校验
    infoPwdValidator() {
      const rule = PWD_RULES[this.pwdChrType] || PWD_RULES['0']
      return [
        { required: true, message: '新密码不能为空', trigger: 'blur' },
        { min: 6, max: 20, message: '新密码长度必须介于 6 和 20 之间', trigger: 'blur' },
        { pattern: rule.pattern, message: rule.message, trigger: 'blur' }
      ]
    },
    // 注册页面密码校验
    registerPwdValidator() {
      const rule = PWD_RULES['0']
      return [
        { required: true, message: '请输入您的密码', trigger: 'blur' },
        { min: 6, max: 20, message: '用户密码长度必须介于 6 和 20 之间', trigger: 'blur' },
        { pattern: rule.pattern, message: rule.message, trigger: 'blur' }
      ]
    }
  }
}