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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
const numberReg = /^-?[0-9][0-9]?.?[0-9]*$/
const intReg = /^-?[1-9][0-9]*$/
const phoneReg = /^1[0-9]{10,10}$/
const emailReg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
const pwdReg = /^.{6,16}$/
const inviteCodeReg = /^[a-zA-Z0-9]{6,16}$/
const idCardReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
export default {
isNumber: function(val) {
return numberReg.test(val)
},
isInt: function(val) {
return intReg.test(val)
},
isPhone: function(val) {
return phoneReg.test(val)
},
isEmail: function(val) {
return emailReg.test(val)
},
isPwd: function(val) {
return pwdReg.test(val)
},
isInviteCode: function(val) {
return inviteCodeReg.test(val)
},
isIdCard: function(val) {
return idCardReg.test(val)
},
validate: function(data, rules) {
let res = { isOk: true, errmsg: '' }
if (!rules || !rules.length) {
return res
}
for (let rule of rules) {
// rule: {name:'', type:'', errmsg:'', min:1, max:2, eq:'', required:Boolean, regex:''}
// 如果值不存在
if (!data[rule.name] || data[rule.name].length == 0) {
// 如果是必填项就返回错误提示,required可以作为type是为了不同的type能给用户不同的提示
if (rule.required) {
res = { isOk: false, errmsg: rule.errmsg }
if (!res.errmsg) {
res.errmsg = '请正确输入所有数据' //默认提示
}
return res
}
// 如果不是必填项就跳过
continue
}
switch (rule.type) {
// required 上面已经判断过了
case 'equals':
case 'eq':
if (data[rule.name] !== data[rule.eqName]) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'number':
if (!numberReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'int':
if (!intReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'phone':
if (!phoneReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'idCard':
if (!idCardReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'email':
if (!emailReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'pwd':
if (!pwdReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'inviteCode':
if (!inviteCodeReg.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'range': // 数字类型的值取值范围
// {name: 'xxx', type: 'range', min: 6, max: 6, required: true, errmsg: 'xxx'}
let val = data[rule.name]
if (val) {
if (numberReg.test(val)) {
if (rule.min && val < rule.min) {
res = { isOk: false, errmsg: rule.errmsg }
} else if (rule.max && val > rule.max) {
res = { isOk: false, errmsg: rule.errmsg }
}
} else {
res = { isOk: false, errmsg: rule.errmsg }
}
}
break
case 'lengthRange': // 字符串长度取值范围
// {name: 'xxx', type: 'lengthRange', min: 6, max: 6, errmsg: 'xxx'}
let le = data[rule.name] ? data[rule.name].length : 0
if (rule.min && le < rule.min) {
res = { isOk: false, errmsg: rule.errmsg }
} else if (rule.max && le > rule.max) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
case 'regex': // 自定义正则表达式
// {name: 'xxx', type: 'regex', regex: /^1[0-9]{10,10}$/, errmsg: 'xxx'}
if (rule.regex && !rule.regex.test(data[rule.name])) {
res = { isOk: false, errmsg: rule.errmsg }
}
break
}
// 发现任何一个错误就立即返回,后面的不再判断
if (!res.isOk) {
if (!res.errmsg) {
res.errmsg = '请正确输入所有数据' //默认提示
}
return res
}
}
return res
}
}