1 | import kindOf from 'kind-of'
|
2 | import { RulePropsType } from './PropTypes'
|
3 |
|
4 | const rules = {
|
5 | required: {
|
6 | required: true,
|
7 | message: '该字段是必填字段',
|
8 | },
|
9 | |
10 |
|
11 |
|
12 | zip: {
|
13 | pattern: /^[1-9]\d{5}(?!\d)$/,
|
14 | message: '该字段不是合法的邮编格式',
|
15 | },
|
16 | |
17 |
|
18 |
|
19 | email: {
|
20 | pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
|
21 | message: '该字段不是合法的邮箱格式',
|
22 | },
|
23 | |
24 |
|
25 |
|
26 | zh: {
|
27 | pattern: /^[\u4e00-\u9fa5]+$/gm,
|
28 | message: '该字段不是合法的中文字符串',
|
29 | },
|
30 | |
31 |
|
32 |
|
33 | zhName: {
|
34 | pattern: /^[\u4e00-\u9fa5]{2,15}$/,
|
35 | message: '该字段不是合法的中文名',
|
36 | },
|
37 | |
38 |
|
39 |
|
40 | url: {
|
41 | pattern: /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i,
|
42 | message: '该字段不是合法的url',
|
43 | },
|
44 | |
45 |
|
46 |
|
47 | phone: {
|
48 | pattern: /^(0|86|17951)?(13[0-9]|14[579]|15[012356789]|166|17[1235678]|18[0-9]|19[189])\s{0,1}[0-9]{4}\s{0,1}[0-9]{4}$|^(0[0-9]{2,3}-?)?[0-9]{7,8}$|^400-?\d{3}-?\d{4}$/,
|
49 | message: '该字段不是有效的电话号',
|
50 | },
|
51 | |
52 |
|
53 |
|
54 | mobilePhone: {
|
55 | pattern: /^(0|86|17951)?(13[0-9]|14[579]|15[012356789]|166|17[1235678]|18[0-9]|19[189])\s{0,1}[0-9]{4}\s{0,1}[0-9]{4}$/,
|
56 | message: '该字段不是有效的手机号',
|
57 | },
|
58 | |
59 |
|
60 |
|
61 | telephone: {
|
62 | pattern: /^(0[0-9]{2,3}-?)?[0-9]{7,8}$|^400-?\d{3}-?\d{4}$/,
|
63 | message: '该字段不是有效的固话号',
|
64 | },
|
65 | |
66 |
|
67 |
|
68 | idCard: {
|
69 | pattern: /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/,
|
70 | message: '该字段不是合法的身份证格式',
|
71 | },
|
72 | |
73 |
|
74 |
|
75 | date: {
|
76 | pattern: /^(?:(?:1[6-9]|[2-9][0-9])[0-9]{2}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:(?:1[6-9]|[2-9][0-9])(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)([-/.]?)0?2\2(?:29))(\s+([01][0-9]:|2[0-3]:)?[0-5][0-9]:[0-5][0-9])?$/,
|
77 | message: '该字段不是合法的日期格式',
|
78 | },
|
79 | |
80 |
|
81 |
|
82 | money: {
|
83 | pattern: /^[+-]?[0-9]+(.{1}[0-9]+){0,1}$/,
|
84 | message: '该字段不是合法的金额',
|
85 | },
|
86 | |
87 |
|
88 |
|
89 | number: {
|
90 | pattern: /^[+-]?\d+$/,
|
91 | message: '该字段不是合法的数字',
|
92 | },
|
93 | |
94 |
|
95 |
|
96 | integer: {
|
97 | pattern: /^[+-]?\d+$/,
|
98 | message: '该字段不是合法的整型数字',
|
99 | },
|
100 | |
101 |
|
102 |
|
103 | floating: {
|
104 | pattern: /^[+-]?[0-9]+(.{1}[0-9]+){0,1}$/,
|
105 | message: '该字段不是合法的浮点型数字',
|
106 | },
|
107 | |
108 |
|
109 |
|
110 | twoTimes: {
|
111 | pattern: /^([02468]|[13579][13579]*[02468])*$/,
|
112 | message: '该字段值必须是2的倍数',
|
113 | },
|
114 | |
115 |
|
116 |
|
117 | threeTimes: {
|
118 | pattern: /^([0369]|[258][0369]*[147]|([147]|[258][0369]*[258])([0369]|[147][0369]*[258])*([258]|[147][0369]*[147]))*$/,
|
119 | message: '该字段值必须是3的倍数',
|
120 | },
|
121 | |
122 |
|
123 |
|
124 | fourTimes: {
|
125 | validator: (rule, value, callback) => {
|
126 | if (isNaN(value) || value % 4 !== 0) {
|
127 | callback(rule.message)
|
128 | }
|
129 | callback()
|
130 | },
|
131 | message: '该字段必须是4的倍数',
|
132 | },
|
133 | fiveTimes: {
|
134 | validator: (rule, value, callback) => {
|
135 | if (isNaN(value) || value % 5 !== 0) {
|
136 | callback(rule.message)
|
137 | }
|
138 | callback()
|
139 | },
|
140 | message: '该字段必须是5的倍数',
|
141 | },
|
142 | sixTimes: {
|
143 | validator: (rule, value, callback) => {
|
144 | if (isNaN(value) || value % 6 !== 0) {
|
145 | callback(rule.message)
|
146 | }
|
147 | callback()
|
148 | },
|
149 | message: '该字段必须是6的倍数',
|
150 | },
|
151 | }
|
152 |
|
153 | export const getRules = (originRules?: RulePropsType) => {
|
154 | const rulesObj: any = []
|
155 | originRules &&
|
156 | originRules.forEach((item: any) => {
|
157 | if (kindOf(item) === 'string') {
|
158 | const rule = rules[item]
|
159 | rulesObj.push(rule)
|
160 | } else if (item.type) {
|
161 | const rule = rules[item.type]
|
162 | const customMessage = {
|
163 | pattern: rule.pattern,
|
164 | message: item.message || rule.message,
|
165 | }
|
166 | rulesObj.push(customMessage)
|
167 | } else {
|
168 | rulesObj.push(item)
|
169 | }
|
170 | })
|
171 | return rulesObj
|
172 | }
|