UNPKG

4.45 kBPlain TextView Raw
1import kindOf from 'kind-of'
2import { RulePropsType } from './PropTypes'
3
4const 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 * 电话号正则,包含手机号、固话号、400电话
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 * 固话正则,包含400电话
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 * 2的倍数
109 */
110 twoTimes: {
111 pattern: /^([02468]|[13579][13579]*[02468])*$/,
112 message: '该字段值必须是2的倍数',
113 },
114 /**
115 * 3的倍数
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 * 4的倍数
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
153export 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}