├── .gitignore
├── .npmignore
├── DESCRIPTION.md
├── LICENSE
├── README.md
├── build
├── rollup.bundle.config.js
├── rollup.config.js
├── rollup.dev.config.js
└── util.js
├── dist
└── h-regular.js
├── example
└── index.html
├── package.json
└── src
├── index.js
└── lib
├── date.js
├── money.js
├── network.js
├── number.js
├── other.js
└── string.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # TypeScript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 | .env.test
60 |
61 | # parcel-bundler cache (https://parceljs.org/)
62 | .cache
63 |
64 | # next.js build output
65 | .next
66 |
67 | # nuxt.js build output
68 | .nuxt
69 |
70 | # vuepress build output
71 | .vuepress/dist
72 |
73 | # Serverless directories
74 | .serverless/
75 |
76 | # FuseBox cache
77 | .fusebox/
78 |
79 | # DynamoDB Local files
80 | .dynamodb/
81 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src/
2 | node_modules/
3 | build/
4 | example/
5 |
--------------------------------------------------------------------------------
/DESCRIPTION.md:
--------------------------------------------------------------------------------
1 | # 正则表达式描述
2 |
3 | * 车牌号
4 | * 第一:普通汽车
5 | * 车牌号格式:汉字 + A-Z + 5位A-Z或0-9( 车牌号不存在字母I和O防止和1、0混淆)
6 | * (只包括了普通车牌号,教练车,警等车牌号 。部分部队车,新能源不包括在内)
7 | * 京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼军空海北沈兰济南广成使领
8 | * 普通汽车规则:"[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}"
9 | *
10 | * 第二:新能源车
11 | * 组成:省份简称(1位汉字)+发牌机关代号(1位字母)+序号(6位),总计8个字符,序号不能出现字母I和字母O
12 | * 通用规则:不区分大小写,第一位:省份简称(1位汉字),第二位:发牌机关代号(1位字母)
13 | * 序号位:
14 | * 小型车,第一位:只能用字母D或字母F,第二位:字母或者数字,后四位:必须使用数字
15 | * ---([DF][A-HJ-NP-Z0-9][0-9]{4})
16 | * 大型车,前五位:必须使用数字,第六位:只能用字母D或字母F。
17 | * ----([0-9]{5}[DF])
18 | * 新能源车规则:"[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))"
19 | *
20 | * 总规则:"([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1})"
21 | * 半角
22 | * 每个半角字符占用一字节空间(一字节有8位),共256个编码空间
23 | * 全角
24 | * 每个全角字符占用两字节空间
25 |
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 haizlin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 常用正则表达式
2 |
3 | > 在日常js开发中积累的一些正则表达式,适用于浏览器和Node环境,欢迎大家提PR补充
4 |
5 | * 交流讨论:维护了一个正则交流微信群(只讨论正则相关),欢迎加入讨论,微信关注公众号:**前端剑解**,点击公众号的菜单:进群交流,并备注“正则”即可入群
6 |
7 | ### 安装
8 | ```javascript
9 |
10 | // npm安装
11 | npm i h-regular --save
12 |
13 | // yarn安装
14 | yarn add h-regular
15 |
16 | ```
17 |
18 | ### 引用
19 | ```javascript
20 |
21 | import hRegular from 'h-regular' // 全部引入
22 | import { email, phone } from 'h-regular' // 部分引入
23 | const hRegular = require('h-regular') // ES5模块引入
24 |
25 | ```
26 |
27 | ### 使用
28 | ```javascript
29 |
30 | // 返回的是所有正则表达式的对象
31 | console.log(hRegular)
32 |
33 | // 返回的是单个正则表达式
34 | console.log(email)
35 |
36 | ```
37 | ### 目录
38 | [字符](#character) | [日期](#date) | [数字](#number) | [金额](#money) | [网络](#network) | [其它](#other)
39 |
40 | ### 正则表达式列表
41 |
42 |
43 |
44 | #### 字符
45 |
46 | 全角字符(fullAngle)
47 | 举例:
48 |
49 | 1. /[^\uFF00-\uFFFF]/g
50 | 2. /[^\x00-\xff]/g
51 |
52 |
53 |
54 |
55 | 半角字符(halfAngle)
56 | 举例:这是半角字符
57 |
58 | /[\x00-\xff]/g
59 |
60 |
61 |
62 |
63 | 空白行(blank)
64 | 举例:第一行\n第三行(中间第二行为空)
65 |
66 | /\n\s*\r/
67 |
68 |
69 |
70 |
71 | 首尾空白字符(包括空格、制表符、换页符等等)(blankSpace)
72 | 举例: 测试首尾空白字符
73 |
74 | 1. /^\s*|\s*$/
75 | 2. /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g
76 |
77 |
78 |
79 |
80 | 带有~的字符(wave)
81 | 举例:我带有~符号哦!
82 |
83 | /[^~\x22]+/i
84 |
85 |
86 |
87 |
88 | xml文件(xml)
89 | 举例:
90 |
91 | /^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$/
92 |
93 |
94 |
95 |
96 | 由26个英文字母组成的字符串(english)
97 | 举例:test
98 |
99 | /^[A-Za-z]+$/
100 |
101 |
102 |
103 |
104 | 由数字和26个英文字母组成的字符串(englishNumber)
105 | 举例:0123test456
106 |
107 | /^[A-Za-z0-9]+$/
108 |
109 |
110 |
111 |
112 | 由数字、26个英文字母或者下划线组成的字符串(englishNumberSymbol)
113 | 举例:
114 |
115 | /^\w+$/
116 |
117 |
118 |
119 |
120 | URL(url)
121 | 举例:
122 |
123 | 1. /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i
124 | 2. /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\/\\w \\.-]*)*\/?$/$1
125 | 3. /[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/i
126 | 4. /https?:\/\/[^\s]*/
127 | 5. /^(f|ht){1}(tp|tps):\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?/
128 |
129 |
130 |
131 |
132 | URI(uri)
133 | 举例:
134 |
135 | /[a-zA-z]+:\/\/[^\s]*/
136 |
137 |
138 |
139 |
140 | 匹配双字节字符(包括汉字在内, 一个双字节字符长度计2,ASCII字符计1)(doubleCharacter)
141 | 举例:
142 |
143 | /[^\x00-\xff]/g
144 |
145 |
146 |
147 |
148 | ASCII(ascii)
149 | 举例:
150 |
151 | /\x20-\x7f/
152 |
153 |
154 |
155 |
156 | GBK下的中文(gbkChina)
157 | 举例:
158 |
159 | /\xa1-\xff/
160 |
161 |
162 |
163 |
164 | 中文(china)
165 | 举例:
166 |
167 | 1. /[\u4E00-\u9FA5]/
168 | 2. /^[\u4e00-\u9fa5],{0,}$/
169 | 3. /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/
170 |
171 |
172 |
173 |
174 | Unicode编码中的汉字范围(chinaChar)
175 | 举例:
176 |
177 | /^[\u2E80-\u9FFF]+$/
178 |
179 |
180 |
181 |
182 | 韩文(korean)
183 | 举例:
184 |
185 | /^\x3130-\x318F$/
186 |
187 |
188 |
189 |
190 | 日文(japanese)
191 | 举例:
192 |
193 | /^\u0800-\u4e00$/
194 |
195 |
196 |
197 |
198 |
199 | #### 日期
200 |
201 | 出生年月日(birth)
202 | 举例:
203 |
204 | /^(19|20)\d{2}\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2]\d)|3[01])$/
205 |
206 |
207 |
208 |
209 | 日期格式,已考虑平闰年:yyyy-mm-dd(yyyymmdd)
210 | 举例:
211 |
212 | 1. /^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/
213 | 2. /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/
214 |
215 |
216 |
217 |
218 | 日期格式,已考虑平闰年:yyyyMMdd(yyyyMMdd)
219 | 举例:
220 |
221 | /^(?:(?!0000)[0-9]{4}(?:(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])(?:29|30)|(?:0[13578]|1[02])31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)0229)$/
222 |
223 |
224 |
225 |
226 | 日期正则,简单判定,未做月份及日期的判定(simpleDate)
227 | 举例:
228 |
229 | /^\d{4}(\-)\d{1,2}\1\d{1,2}$/
230 |
231 |
232 |
233 |
234 | 日期正则,复杂判定(complexDate)
235 | 举例:
236 |
237 | /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/
238 |
239 |
240 |
241 |
242 | 月份,格式:"01"-"09"和"1"-"12"(month)
243 | 举例:05
244 |
245 | /^(0?[1-9]|1[0-2])$/
246 |
247 |
248 |
249 |
250 | 一个月的31天,格式:01、09和1、31(day)
251 | 举例:31
252 |
253 | /^((0?[1-9])|((1|2)[0-9])|30|31)$/
254 |
255 |
256 |
257 |
258 | 12小时制,hh:mm:ss(hours12)
259 | 举例:11:32:23
260 |
261 | /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/
262 |
263 |
264 |
265 |
266 | 24小时制,hh:mm:ss(hours24)
267 | 举例:17:32:23
268 |
269 | /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
270 |
271 |
272 |
273 |
274 |
275 | #### 金额
276 |
277 | 只能有一位小数(onlyOneDecimal )
278 | 举例:
279 |
280 | /^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$/
281 |
282 |
283 |
284 |
285 | 小数点后只能有最多两位数字(可以有正负号)(twoDigitNumber)
286 | 举例:-36.58
287 |
288 | /^[+-]*(\d)*(\.\d{0,2})*$/
289 |
290 |
291 |
292 |
293 | 格式:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000"()
294 | 举例:
295 |
296 | /^[1-9][0-9]*$/
297 |
298 |
299 |
300 |
301 | 任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过(anyNumber)
302 | 举例:
303 |
304 | /^(0|[1-9][0-9]*)$/
305 |
306 |
307 |
308 |
309 | 一个0或者一个不以0开头的数字,还可以允许开头有一个负号()
310 | 举例:
311 |
312 | /^(0|-?[1-9][0-9]*)$/
313 |
314 |
315 |
316 |
317 | 以0或者一个可能为负的开头不为0的数字()
318 | 举例:
319 |
320 | /^[0-9]+(.[0-9]+)?$/
321 |
322 |
323 |
324 |
325 | 小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的()
326 | 举例:
327 |
328 | /^[0-9]+(.[0-9]{2})?$/
329 |
330 |
331 |
332 |
333 | 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样()
334 | 举例:
335 |
336 | /^[0-9]+(.[0-9]{1,2})?$/
337 |
338 |
339 |
340 |
341 | 1到3个数字,后面跟着任意个逗号+3个数字,逗号成为可选,而不是必须(commaSeparation)
342 | 举例:
343 |
344 | /^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$/
345 |
346 |
347 |
348 |
349 |
350 | #### 数字
351 |
352 | 纯数字(number)
353 | 举例:
354 |
355 | 1. /^-?\d*\.?\d+$/
356 | 2. /^[0-9]*$/
357 |
358 |
359 |
360 |
361 | n位的数字(nDigitNumber)
362 | 举例:
363 |
364 | /^\d{n}$/
365 |
366 |
367 |
368 |
369 | 至少n位数字()
370 | 举例:
371 |
372 | /^\d{n,}$/
373 |
374 |
375 |
376 |
377 | m-n位的数字(digitsRange)
378 | 举例:58
379 |
380 | /^\d{m,n}$
381 |
382 |
383 |
384 |
385 | 整数(integer)
386 | 举例:
387 |
388 | 1. /^-?\d+$/
389 | 2. /^-?[1-9]\d*$/
390 |
391 |
392 |
393 |
394 | 正整数(positiveInteger)
395 | 举例:
396 |
397 | 1. /^\d+$/
398 | 2. /^[1-9]\d*$/
399 |
400 |
401 |
402 |
403 | 非正整数(负整数 + 0)(nonPositiveInteger)
404 | 举例:
405 |
406 | 1. /^-[1-9]\d*|0$/
407 | 2. /^((-\d+)|(0+))$/
408 |
409 |
410 |
411 |
412 | 负整数(negtiveInteger)
413 | 举例:
414 |
415 | 1. /^-\d+$/
416 | 2. /^-[1-9]\d*$/
417 |
418 |
419 |
420 |
421 | 正数(positive)
422 | 举例:
423 |
424 | /^\d*\.?\d+$/
425 |
426 |
427 |
428 |
429 | 正数、负数、和小数(positiveNegative)
430 | 举例:
431 |
432 | /^(\-|\+)?\d+(\.\d+)?$/
433 |
434 |
435 |
436 |
437 | 负数(negative)
438 | 举例:
439 |
440 | /^-\d*\.?\d+$/
441 |
442 |
443 |
444 |
445 | 非负整数(正整数 + 0)(nonNegtiveInteger)
446 | 举例:
447 |
448 | 1. /^[1-9]\d*|0$/
449 | 2. /^\d+$/
450 |
451 |
452 |
453 |
454 | 非零的负整数(nonZeroNegativeInteger)
455 | 举例:
456 |
457 | 1. /^\-[1-9][0-9]*$/
458 | 2. /^-[1-9]\d*$/
459 |
460 |
461 |
462 |
463 | 非零的正整数(nonZeroPositiveInteger)
464 | 举例:
465 |
466 | 1. /^\+?[1-9][0-9]*$/
467 | 2. /^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$/
468 |
469 |
470 |
471 |
472 | 浮点数(floatPoint)
473 | 举例:
474 |
475 | 1. /^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$/
476 | 2. /^(-?\d+)(\.\d+)?$/
477 |
478 |
479 |
480 |
481 | 正浮点数(positiveFloatingPoint)
482 | 举例:
483 |
484 | 1. /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/
485 | 2. /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/
486 |
487 |
488 |
489 |
490 | 非正浮点数(负浮点数 + 0)(nonPositiveFloatingPoint)
491 | 举例:
492 |
493 | 1. /^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$/
494 | 2. /^((-\d+(\.\d+)?)|(0+(\.0+)?))$ /
495 |
496 |
497 |
498 |
499 | 负浮点数(negativeFloatingPointNumber)
500 | 举例:
501 |
502 | 1. /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/
503 | 2. /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
504 |
505 |
506 |
507 |
508 | 非负浮点数(正浮点数 + 0)(nonNegativeFloatingPointNumber)
509 | 举例:
510 |
511 | 1. /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/
512 | 2. /^\d+(\.\d+)?$/
513 |
514 |
515 |
516 |
517 | 非零开头的最多带两位小数的数字()
518 | 举例:
519 |
520 | /^([1-9][0-9]*)+(.[0-9]{1,2})?$/
521 |
522 |
523 |
524 |
525 | 有1-4位小数的正实数(positiveRealNumber)
526 | 举例:1234
527 |
528 | /^[0-9]+(.[0-9]{1,4})?$/
529 |
530 |
531 |
532 |
533 |
534 | #### 网络
535 |
536 | ipv4(ipv4)
537 | 举例:127.0.0.1
538 |
539 | /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
540 |
541 |
542 |
543 |
544 | ipv6(ipv6)
545 | 举例:
546 |
547 | /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i
548 |
549 |
550 |
551 |
552 | 网址(website)
553 | 举例:http://www.haizlin.com
554 |
555 | /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*$/
556 |
557 |
558 |
559 |
560 | 域名(domain)
561 | 举例:http://www.baidu.com:8081?a=1&b=c
562 |
563 | /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/
564 |
565 |
566 |
567 |
568 | 端口号(port)
569 | 举例:65535
570 |
571 | /^[1-9]$|(^[1-9][0-9]$)|(^[1-9][0-9][0-9]$)|(^[1-9][0-9][0-9][0-9]$)|(^[1-6][0-5][0-5][0-3][0-5]$)/
572 |
573 |
574 |
575 |
576 | 子网掩码(subnetMask)
577 | 举例:255.255.255.0
578 |
579 | /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/
580 |
581 |
582 |
583 |
584 | http/https(http)
585 | 举例:
586 |
587 | 1. /(http|https):\/\/([\w.]+\/?)\S*/
588 | 2. /http[s]{0,1}:\/\/([\w.]+\/?)\S*/
589 |
590 |
591 |
592 |
593 |
594 | #### 其它
595 |
596 | 5-11位的腾讯QQ号,腾讯QQ号从10000开始(qq)
597 | 举例:80285586
598 |
599 | /^[1-9][0-9]{4,11}$/
600 |
601 |
602 |
603 |
604 | 邮箱(email)
605 | 举例:
606 |
607 | 1. /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
608 | 2. /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
609 | 3. /[\w!#$%&'*+/=?^_{|}~-]+(?:.[\w!#$%&'*+/=?^_{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/
610 | 4. /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
611 | 5. /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+@(([a-zA-Z0-9]+)\.){1,2}[a-z]{2,3}$/
612 |
613 |
614 |
615 |
616 | 银行卡(bankCard)
617 | 举例:
618 |
619 | /^([1-9]{1})(\d{15}|\d{18})$/
620 |
621 |
622 |
623 |
624 | IE版本(ieVervison)
625 | 举例:
626 |
627 | /^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$/
628 |
629 |
630 |
631 |
632 | 微信号:6至20位,以字母开头,字母,数字,减号,下划线(weChat)
633 | 举例:aya002002
634 |
635 | /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
636 |
637 |
638 |
639 |
640 | 文件的扩展名(fileExt)
641 | 举例:
642 |
643 | 1. /^.*?\.(html|css|jpg)$/
644 | 2. /^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$$/
645 |
646 |
647 |
648 |
649 | 根据工信部2019年最新公布的手机号段()
650 | 举例:
651 |
652 | 1. /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/
653 | 2. /^1[34578]\d{9}$/
654 | 3. /^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/
655 |
656 |
657 |
658 |
659 | 中国移动(phoneYidong)
660 | 举例:13456555555
661 |
662 | /^1(34[0-8]|3[5-9\d]|440|4[78]\d|5[0-27-9]\d|70[356]|78\d|8[2-478]\d|98\d)\d{7}$/
663 |
664 |
665 |
666 |
667 | 中国联通(phoneLiantong)
668 | 举例:18689888888
669 |
670 | /^1(3[0-2]\d|4[56]\d|5[56]\d|66\d|70[4789]|71|7[56]\d|8[56]\d)\d{7}$/
671 |
672 |
673 |
674 |
675 | 中国电信(phoneDianxin)
676 | 举例:13388888888
677 |
678 | /^1(3[3]\d|349|410|49\d|53\d|70[0-2]|7[37]\d|740|8[019]\d|99\d)\d{7}$/
679 |
680 |
681 |
682 |
683 | 16进制颜色(hexColor)
684 | 举例:测试提取16进制的颜色#ff0012值
685 |
686 | /#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/
687 |
688 |
689 |
690 |
691 | 10进制值(decimal)
692 | 举例:15
693 |
694 | /^d+.d+$/
695 |
696 |
697 |
698 |
699 | JSON(json)
700 | 举例:
701 |
702 | /^\w+\(({[^()]+})\)$/
703 |
704 |
705 |
706 |
707 | 中文名2到10位(字母,数字,下划线,减号)(chinaName)
708 | 举例:
709 |
710 | /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10}){0,2}$/
711 |
712 |
713 |
714 |
715 | 中英验证码(verificationCode)
716 | 举例:
717 |
718 | /^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{6})$/
719 |
720 |
721 |
722 |
723 | html标签(htmlTag)
724 | 举例:
725 |
726 | 1. /<(.*)>.*<\/\1>|<(.*) \/>/
727 | 2. /^<([a-z]+)([^<]+)(?:>(.)\1>|\s+/>)$/
728 | 3. /<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)\/?>/
729 |
730 |
731 |
732 |
733 | html注释(htmlNotes)
734 | 举例:
735 |
736 | 1. /^<!--[\s\S]*?-->$/
737 | 2. /<!--(.*?)-->/
738 |
739 |
740 |
741 |
742 | html片段(htmlFragment)
743 | 举例:
744 |
745 | /^<([a-z]+)([^<]+)*(?:>(.*)<\\/\\\\\\1>|\\s+\\/>)$/
746 |
747 |
748 |
749 |
750 | CSS属性(css)
751 | 举例:
752 |
753 | /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/
754 |
755 |
756 |
757 |
758 | 提取页面的url(htmlUrl)
759 | 举例:百度
760 |
761 | /(<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^" rel="external nofollow" ]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>
762 |
763 |
764 |
765 |
766 | 英文名(enName)
767 | 举例:
768 |
769 | 1. /^[a-zA-Z0-9_-]{2,10}$/
770 | 2. /^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$/
771 |
772 |
773 |
774 |
775 | 座机号,固定电话(telephone)
776 | 举例:
777 |
778 | 1. /\d{3}-\d{8}|\d{4}-\d{7}/
779 | 2. /^(0[0-9]{2})\d{8}$|^(0[0-9]{3}(\d{7,8}))$/
780 |
781 |
782 |
783 |
784 | 普通电话、传真号码:可以"+"开头,除数字外,可含有"-"(fax)
785 | 举例:
786 |
787 | /^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/
788 |
789 |
790 |
791 |
792 | 电话号码,正确格式:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX(tel)
793 | 举例:010-88888888
794 |
795 | /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/
796 |
797 |
798 |
799 |
800 | 用户名正则,4到16位(字母,数字,下划线,减号)(userName)
801 | 举例:
802 |
803 | 1. /^[a-zA-Z0-9_-]{4,16}$/
804 | 2. /^[a-zA-Z][a-zA-Z0-9_]{4,16}$/
805 |
806 |
807 |
808 |
809 | 密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符()
810 | 举例:
811 |
812 | /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/
813 |
814 |
815 |
816 |
817 | 6-16位字符,区分大小写(不能是9位以下的纯数字,不含空格),必须包含大写字母()
818 | 举例:
819 |
820 | /^(?!\d{6,8}$)(?! )(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9_]{6,16}$/
821 |
822 |
823 |
824 |
825 | 6-16个字符,区分大小写(不能是9位以下的纯数字,不含空格)()
826 | 举例:
827 |
828 | /^(?!\d{6,8}$)(?! )(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9_]{6,16}$/
829 |
830 |
831 |
832 |
833 | 6-20个字符,同时包含大、小写字母及数字,不可包含特殊字符()
834 | 举例:
835 |
836 | /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/
837 |
838 |
839 |
840 |
841 | 中国邮政编码(六位数)(postalCode)
842 | 举例:
843 |
844 | 1. /^\d{6}$/
845 | 2. /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
846 | 3. [1-9]\d{5}(?!\d)
847 |
848 |
849 |
850 |
851 | 15~18位身份证(idCard)
852 | 举例:
853 |
854 | 1. /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/
855 | 2. /^[1-9]{1}\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
856 | 3. /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/
857 |
858 |
859 |
860 |
861 | 18位的新版身份证()
862 | 举例:
863 |
864 | 1. /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
865 | 2. ^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X|x)$
866 | 3. /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/
867 |
868 |
869 |
870 |
871 | 全角标点符(可以有中文)(mark)
872 | 举例:
873 |
874 | /[\uFF00-\uFFFF]/g
875 |
876 |
877 |
878 |
879 | 中文、英文、数字包括下划线(zhEnNumber)
880 | 举例:
881 |
882 | /^[\\u4E00-\\u9FA5A-Za-z0-9_]+$/$1
883 |
884 |
885 |
886 |
887 | 以字母开头,长度在6-18之间,只能包含字符、数字和下划线(beginLetter)
888 | 举例:
889 |
890 | /^[a-zA-Z]\w{5,17}$/
891 |
892 |
893 |
894 |
895 | 是否含有 ^%&',;=?$\" 等字符(specialChar)
896 | 举例:
897 |
898 | /[^%&',;=?$\x22]+/
899 |
900 |
901 |
902 |
903 | base64(base64)
904 | 举例:
905 |
906 | /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i
907 |
908 |
909 |
910 |
911 | 64位md5(md5)
912 | 举例:
913 |
914 | /^[a-f0-9]{64}$/
915 |
916 |
917 |
918 |
919 | IMEI(imei)
920 | 举例:
921 |
922 | /^\d{15,17}$/
923 |
924 |
925 |
926 |
927 | window下"文件夹"路径(windowFolder)
928 | 举例:
929 |
930 | /^[a-zA-Z]:\\(?:\w+\\?)*$/
931 |
932 |
933 |
934 |
935 | window下"文件"路径(windowFile)
936 | 举例:
937 |
938 | /^[a-zA-Z]:\\(?:\w+\\)*\w+\.\w+$/
939 |
940 |
941 |
942 |
943 | 视频链接地址(videoUrl)
944 | 举例:
945 |
946 | /^https?:\/\/.*?(?:swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i
947 |
948 |
949 |
950 |
951 | 图片链接地址(imgUrl)
952 | 举例:
953 |
954 | /^https?:\/\/.*?(?:gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i
955 |
956 |
957 |
958 |
959 | 统一社会信用代码(creditCode)
960 | 举例:12540300G347861750
961 |
962 | /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
963 |
964 |
965 |
966 |
967 | 车牌号(新能源+非新能源)(licensePlate)
968 | 举例:
969 |
970 | /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
971 |
972 |
973 |
974 |
975 | 新能源车牌号(newEnergy)
976 | 举例:
977 |
978 | /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))$/
979 |
980 |
981 |
982 |
983 | 非新能源车牌号(nonNewEnergy)
984 | 举例:
985 |
986 | /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
987 |
988 |
989 |
990 |
991 | 护照(包含香港、澳门)(passportId)
992 | 举例:
993 |
994 | /(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/
995 |
996 |
997 |
998 | ### 版本
999 | * v1.0.0: 初始化项目,添加了112个常用正则,js版本调用模块,有些正则是网上找到的,未找到出处,在此感谢那些作者
1000 |
1001 | ## 项目骨干
1002 | - [qq674785876](https://github.com/qq674785876)
1003 | - [undefinedYu](https://github.com/undefinedYu)
1004 | - [qingleizhang123](https://github.com/qingleizhang123)
1005 | - [yxkhaha](https://github.com/yxkhaha)
1006 | - [zhaoqian0901](https://github.com/zhaoqian0901)
1007 |
1008 | ## 贡献
1009 | 欢迎大家到**Issues**交流或通过提交**PR**的形式对本项目进行贡献
1010 |
1011 | ## License
1012 | [](https://github.com/haizlin/h-regular/LICENSE)
--------------------------------------------------------------------------------
/build/rollup.bundle.config.js:
--------------------------------------------------------------------------------
1 | const util = require("./util");
2 | const baseConfig = require("./rollup.config");
3 |
4 | module.exports = {
5 | ...baseConfig,
6 | output: {
7 | file: util.resolve("dist/h-regular.js"),
8 | format: "cjs"
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/build/rollup.config.js:
--------------------------------------------------------------------------------
1 | const util = require("./util");
2 | const babel = require("rollup-plugin-babel");
3 | const nodeResolve = require("rollup-plugin-node-resolve");
4 | const commonjs = require("rollup-plugin-commonjs");
5 |
6 | const extensions = [".js", ".ts", ".tsx"];
7 |
8 | const babelOptions = {
9 | extensions,
10 | runtimeHelpers: true,
11 | presets: [
12 | [
13 | "@babel/env",
14 | {
15 | modules: false,
16 | targets: {
17 | node: "12.9.1"
18 | }
19 | }
20 | ]
21 | ]
22 | };
23 |
24 | module.exports = {
25 | input: util.resolve("src/index.js"),
26 | plugins: [
27 | nodeResolve({ extensions }),
28 | commonjs({ extensions, ignore: ["conditional-runtime-dependency"] }),
29 | babel(babelOptions)
30 | ],
31 | external: ["schema-verify"]
32 | };
33 |
--------------------------------------------------------------------------------
/build/rollup.dev.config.js:
--------------------------------------------------------------------------------
1 | const util = require("./util");
2 | const baseConfig = require("./rollup.config");
3 |
4 | module.exports = {
5 | ...baseConfig,
6 | output: {
7 | file: util.resolve("dist/h-regular.js"),
8 | format: "cjs"
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/build/util.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | const resolve = function(filePath) {
4 | return path.join(__dirname, "..", filePath);
5 | };
6 |
7 | module.exports = {
8 | resolve
9 | };
10 |
--------------------------------------------------------------------------------
/dist/h-regular.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | exports.fullAngle = /[^\uFF00-\uFFFF]/g;
4 | exports.fullAngle_1 = /[^\x00-\xff]/g; // 半角:每个半角字符占用一字节空间(一字节有8位),共256个编码空间
5 |
6 | exports.halfAngle = /[\x00-\xff]/g; // 空白行
7 |
8 | exports.blank = /\n\s*\r/; // 首尾空白字符
9 |
10 | exports.blankSpace = /^\s*|\s*$/; // 带有~的字符
11 |
12 | exports.wave = /[^~\x22]+/i; // xml文件
13 |
14 | exports.xml = /^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$/; // 由26个英文字母组成的字符串
15 |
16 | exports.english = /^[A-Za-z]+$/; // 由数字和26个英文字母组成的字符串
17 |
18 | exports.englishNumber = /^[A-Za-z0-9]+$/; // 由数字、26个英文字母或者下划线组成的字符串
19 |
20 | exports.englishNumberSymbol = /^\w+$/; // URL
21 |
22 | exports.url = /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i; // URI
23 |
24 | exports.uri = /[a-zA-z]+:\/\/[^\s]*/; // 匹配双字节字符(包括汉字在内, 一个双字节字符长度计2,ASCII字符计1)
25 |
26 | exports.doubleCharacter = /[^\x00-\xff]/; // ASCII
27 |
28 | exports.ascii = /\x20-\x7f/; // GBK下的中文
29 |
30 | exports.gbkChina = /\xa1-\xff/; // 中文
31 |
32 | exports.china = /[\u4E00-\u9FA5]/; // Unicode编码中的汉字范围
33 |
34 | exports.chinaChar = /^[\u2E80-\u9FFF]+$/; // 韩文
35 |
36 | exports.korean = /^\x3130-\x318F$/; // 日文
37 |
38 | exports.japanese = /^\u0800-\u4e00$/;
39 |
40 | exports.birth = /^(19|20)\d{2}\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2]\d)|3[01])$/; // 日期格式,已考虑平闰年:yyyy-mm-dd
41 |
42 | exports.yyyymmdd = /^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/; // 日期格式,已考虑平闰年:yyyyMMdd
43 |
44 | exports.yyyyMMdd = /^(?:(?!0000)[0-9]{4}(?:(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])(?:29|30)|(?:0[13578]|1[02])31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)0229)$/; // 日期正则,简单判定,未做月份及日期的判定
45 |
46 | exports.simpleDate = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/; // 日期正则,复杂判定
47 |
48 | exports.complexDate = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/; // 月份,格式:"01"-"09"和"1"-"12"
49 |
50 | exports.month = /^(0?[1-9]|1[0-2])$/; // 一个月的31天,格式:01、09和1、31
51 |
52 | exports.day = /^((0?[1-9])|((1|2)[0-9])|30|31)$/; // 12小时制,hh:mm:ss
53 |
54 | exports.hours12 = /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/; // 24小时制,hh:mm:ss
55 |
56 | exports.hours24 = /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/;
57 |
58 | exports.onlyOneDecimal = /^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$/; // 小数点后只能有最多两位数字(可以有正负号)
59 |
60 | exports.twoDigitNumber = /^[+-]*(\d)*(\.\d{0,2})*$/; // 格式:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000"
61 |
62 | exports.birth = /^[1-9][0-9]*$/; // 任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过
63 |
64 | exports.anyNumber = /^(0|[1-9][0-9]*)$/; // 一个0或者一个不以0开头的数字,还可以允许开头有一个负号
65 |
66 | exports.birth = /^(0|-?[1-9][0-9]*)$/; // 表示一个0或者一个可能为负的开头不为0的数字,让用户以0开头好了,把负号的也去掉,因为钱总不能是负的吧
67 |
68 | exports.birth = /^[0-9]+(.[0-9]+)?$/; // 小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的
69 |
70 | exports.birth = /^[0-9]+(.[0-9]{2})?$/; // 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样
71 |
72 | exports.birth = /^[0-9]+(.[0-9]{1,2})?$/; // 1到3个数字,后面跟着任意个逗号+3个数字,逗号成为可选,而不是必须
73 |
74 | exports.commaSeparation = /^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$/;
75 |
76 | exports.ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; // ipv6
77 |
78 | exports.ipv6 = /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i; // 网址
79 |
80 | exports.website = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*$/; // 域名
81 |
82 | exports.domain = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/; // 端口号
83 |
84 | exports.port = /^[1-9]$|(^[1-9][0-9]$)|(^[1-9][0-9][0-9]$)|(^[1-9][0-9][0-9][0-9]$)|(^[1-6][0-5][0-5][0-3][0-5]$)/; // 子网掩码
85 |
86 | exports.subnetMask = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/;
87 |
88 | exports.number = /^-?\d*\.?\d+$/; // n位的数字
89 |
90 | exports.nDigitNumber = /^\d{n}$/; // 至少n位数字
91 |
92 | exports.birth = /^\d{n,}$/; // m-n位的数字
93 |
94 | exports.digitsRange = /^\d{m,n}$/; // 整数
95 |
96 | exports.integer = /^-?\d+$/; // 正整数
97 |
98 | exports.positiveInteger = /^\d+$/; // 非正整数(负整数 + 0)
99 |
100 | exports.nonPositiveInteger = /^-[1-9]\d*|0$/; // 负整数
101 |
102 | exports.negtiveInteger = /^-\d+$/; // 正数
103 |
104 | exports.positive = /^\d*\.?\d+$/; // 正数、负数、和小数
105 |
106 | exports.positiveNegative = /^(\-|\+)?\d+(\.\d+)?$/; // 负数
107 |
108 | exports.negative = /^-\d*\.?\d+$/; // 非负整数(正整数 + 0)
109 |
110 | exports.nonNegtiveInteger = /^[1-9]\d*|0$/; // 非零的负整数
111 |
112 | exports.nonZeroNegativeInteger = /^\-[1-9][0-9]*$/; // 非零的正整数
113 |
114 | exports.nonZeroPositiveInteger = /^\+?[1-9][0-9]*$/; // 浮点数
115 |
116 | exports.floatPoint = /^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$/; // 正浮点数
117 |
118 | exports.positiveFloatingPoint = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/; // 非正浮点数(负浮点数 + 0)
119 |
120 | exports.nonPositiveFloatingPoint = /^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$/; // 负浮点数
121 |
122 | exports.negativeFloatingPointNumber = /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/; // 非负浮点数(正浮点数 + 0)
123 |
124 | exports.nonNegativeFloatingPointNumber = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/; // 非零开头的最多带两位小数的数字
125 |
126 | exports.birth = /^([1-9][0-9]*)+(.[0-9]{1,2})?$/; // 有1-4位小数的正实数
127 |
128 | exports.positiveRealNumber = /^[0-9]+(.[0-9]{1,4})?$/;
129 |
130 | exports.qq = /^[1-9][0-9]{4,11}$/; // 邮箱
131 |
132 | exports.email = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; // 银行卡
133 |
134 | exports.bankCard = /^([1-9]{1})(\d{15}|\d{18})$/; // IE版本
135 | // exports.ieVervison = /^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$/
136 | // 微信号:6至20位,以字母开头,字母,数字,减号,下划线
137 |
138 | exports.weChat = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/; // 文件的扩展名
139 |
140 | exports.fileExt = /^.*?\.(html|css|jpg)$/; // 根据工信部2019年最新公布的手机号段
141 |
142 | exports.birth = /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/; // 中国移动
143 |
144 | exports.phoneYidong = /^1(34[0-8]|3[5-9\d]|440|4[78]\d|5[0-27-9]\d|70[356]|78\d|8[2-478]\d|98\d)\d{7}$/; // 中国联通
145 |
146 | exports.phoneLiantong = /^1(3[0-2]\d|4[56]\d|5[56]\d|66\d|70[4789]|71|7[56]\d|8[56]\d)\d{7}$/; // 中国电信
147 |
148 | exports.phoneDianxin = /^1(3[3]\d|349|410|49\d|53\d|70[0-2]|7[37]\d|740|8[019]\d|99\d)\d{7}$/; // 16进制颜色
149 |
150 | exports.hexColor = /#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/; // 10进制值
151 |
152 | exports.decimal = /^d+.d+$/; // JSON
153 |
154 | exports.json = /^\w+\(({[^()]+})\)$/; // 中文名2到10位(字母,数字,下划线,减号)
155 |
156 | exports.chinaName = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10}){0,2}$/; // 中英验证码
157 |
158 | exports.verificationCode = /^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{6})$/; // html标签
159 |
160 | exports.htmlTag = /<(.*)>.*<\/\1>|<(.*) \/>/; // html注释
161 |
162 | exports.htmlNotes = /^!--[\s\S]*?-->$/; // html片段
163 | // exports.htmlFragment = /^<([a-z]+)([^<]+)*(?:>(.*)<\\/\\\\\\1>|\\s+\\/>)$/
164 | // CSS属性
165 |
166 | exports.css = /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/; // 提取页面的url
167 | // exports.htmlUrl = /(a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^" rel="external nofollow" ]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>
168 | // 普通电话、传真号码:可以"+"开头,除数字外,可含有"-"
169 |
170 | exports.fax = /^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/; // 座机号,固定电话
171 |
172 | exports.telephone = /\d{3}-\d{8}|\d{4}-\d{7}/; // 电话号码,正确格式:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX
173 |
174 | exports.tel = /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/; // 用户名正则,4到16位(字母,数字,下划线,减号)
175 |
176 | exports.userName = /^[a-zA-Z0-9_-]{4,16}$/; // 密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
177 |
178 | exports.birth = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/; // 6-16位字符,区分大小写(不能是9位以下的纯数字,不含空格),必须包含大写字母
179 |
180 | exports.birth = /^(?!\d{6,8}$)(?! )(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9_]{6,16}$/; // 6-16个字符,区分大小写(不能是9位以下的纯数字,不含空格)
181 |
182 | exports.birth = /^(?!\d{6,8}$)(?! )(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9_]{6,16}$/; // 6-20个字符,同时包含大、小写字母及数字,不可包含特殊字符
183 |
184 | exports.birth = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/; // 中国邮政编码(六位数)
185 |
186 | exports.postalCode = /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/; // 18位身份证
187 |
188 | exports.idCard = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/; // 18位的新版身份证
189 |
190 | exports.birth = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/; // 全角标点符(可以有中文)
191 |
192 | exports.mark = /[\uFF00-\uFFFF]/; // 中文、英文、数字包括下划线
193 |
194 | exports.zhEnNumber = /^[\\u4E00-\\u9FA5A-Za-z0-9_]+$/; // 以字母开头,长度在6-18之间,只能包含字符、数字和下划线
195 |
196 | exports.beginLetter = /^[a-zA-Z]\w{5,17}$/; // 是否含有 ^%&',;=?$\" 等字符
197 |
198 | exports.specialChar = /[^%&',;=?$\x22]+/; // base64
199 |
200 | exports.base64 = /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i; // 64位md5
201 |
202 | exports.md5 = /^[a-f0-9]{64}$/; // window下"文件夹"路径
203 |
204 | exports.windowFolder = /^[a-zA-Z]:\\(?:\w+\\?)*$/; // window下"文件"路径
205 |
206 | exports.windowFile = /^[a-zA-Z]:\\(?:\w+\\)*\w+\.\w+$/; // 视频链接地址
207 |
208 | exports.videoUrl = /^https?:\/\/.*?(?:swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i; // 图片链接地址
209 |
210 | exports.imgUrl = /^https?:\/\/.*?(?:gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i; // 统一社会信用代码
211 |
212 | exports.creditCode = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/; // 车牌号(新能源+非新能源)
213 |
214 | exports.licensePlate = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/; // 新能源车牌号
215 |
216 | exports.newEnergy = /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))$/; // 非新能源车牌号
217 |
218 | exports.nonNewEnergy = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/; // 护照(包含香港、澳门)
219 |
220 | exports.passportId = /(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/;
221 |
--------------------------------------------------------------------------------
/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 正则在线测试
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "h-regular",
3 | "version": "1.0.6",
4 | "description": "在日常js开发中积累的112个正则表达式,适用于浏览器和Node环境",
5 | "main": "dist/h-regular.js",
6 | "dependencies": {},
7 | "devDependencies": {
8 | "@babel/core": "^7.4.5",
9 | "@babel/preset-env": "^7.4.5",
10 | "@types/node": "^12.12.17",
11 | "chai": "^4.2.0",
12 | "jest": "^24.8.0",
13 | "mocha": "^6.1.4",
14 | "rollup-plugin-babel": "^4.3.2",
15 | "rollup-plugin-commonjs": "^10.0.0",
16 | "rollup-plugin-node-resolve": "^5.0.1"
17 | },
18 | "scripts": {
19 | "test": "echo \"Error: no test specified\" && exit 1",
20 | "dev": "rollup -c ./build/rollup.dev.config.js -w",
21 | "build": "rollup -c ./build/rollup.bundle.config.js"
22 | },
23 | "repository": {
24 | "type": "git",
25 | "url": "https://github.com/haizlin/h-regular"
26 | },
27 | "keywords": [
28 | "regular",
29 | "RegExp",
30 | "Pattern",
31 | "Match",
32 | "正则",
33 | "正则表达式",
34 | "正则校验",
35 | "身份证号正则",
36 | "密码正则",
37 | "邮箱正则"
38 | ],
39 | "author": "浪子神剑",
40 | "license": "MIT"
41 | }
42 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import string from './lib/string';
2 | import date from './lib/date';
3 | import money from './lib/money';
4 | import network from './lib/network';
5 | import number from './lib/number';
6 | import other from './lib/other';
7 |
--------------------------------------------------------------------------------
/src/lib/date.js:
--------------------------------------------------------------------------------
1 | export default {}
2 |
3 | // 出生年月日
4 | exports.birth = /^(19|20)\d{2}\-((0?[1-9])|(1[0-2]))\-((0?[1-9])|([1-2]\d)|3[01])$/
5 |
6 | // 日期格式,已考虑平闰年:yyyy-mm-dd
7 | exports.yyyymmdd = /^[1-2][0-9][0-9][0-9]-[0-1]{0,1}[0-9]-[0-3]{0,1}[0-9]$/
8 |
9 | // 日期格式,已考虑平闰年:yyyyMMdd
10 | exports.yyyyMMdd = /^(?:(?!0000)[0-9]{4}(?:(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])(?:29|30)|(?:0[13578]|1[02])31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)0229)$/
11 |
12 | // 日期正则,简单判定,未做月份及日期的判定
13 | exports.simpleDate = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/
14 |
15 | // 日期正则,复杂判定
16 | exports.complexDate = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/
17 |
18 | // 月份,格式:"01"-"09"和"1"-"12"
19 | exports.month = /^(0?[1-9]|1[0-2])$/
20 |
21 | // 一个月的31天,格式:01、09和1、31
22 | exports.day = /^((0?[1-9])|((1|2)[0-9])|30|31)$/
23 |
24 | // 12小时制,hh:mm:ss
25 | exports.hours12 = /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/
26 |
27 | // 24小时制,hh:mm:ss
28 | exports.hours24 = /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
29 |
--------------------------------------------------------------------------------
/src/lib/money.js:
--------------------------------------------------------------------------------
1 | export default {}
2 |
3 | // 只能有一位小数
4 | exports.onlyOneDecimal = /^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$/
5 |
6 | // 小数点后只能有最多两位数字(可以有正负号)
7 | exports.twoDigitNumber = /^[+-]*(\d)*(\.\d{0,2})*$/
8 |
9 | // 格式:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000"
10 | exports.birth = /^[1-9][0-9]*$/
11 |
12 | // 任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过
13 | exports.anyNumber = /^(0|[1-9][0-9]*)$/
14 |
15 | // 一个0或者一个不以0开头的数字,还可以允许开头有一个负号
16 | exports.birth = /^(0|-?[1-9][0-9]*)$/
17 |
18 | // 表示一个0或者一个可能为负的开头不为0的数字,让用户以0开头好了,把负号的也去掉,因为钱总不能是负的吧
19 | exports.birth = /^[0-9]+(.[0-9]+)?$/
20 |
21 | // 小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的
22 | exports.birth = /^[0-9]+(.[0-9]{2})?$/
23 |
24 | // 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样
25 | exports.birth = /^[0-9]+(.[0-9]{1,2})?$/
26 |
27 | // 1到3个数字,后面跟着任意个逗号+3个数字,逗号成为可选,而不是必须
28 | exports.commaSeparation = /^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$/
--------------------------------------------------------------------------------
/src/lib/network.js:
--------------------------------------------------------------------------------
1 | export default {}
2 |
3 | // ipv4
4 | exports.ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
5 |
6 | // ipv6
7 | exports.ipv6 = /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i
8 |
9 | // 网址
10 | exports.website = /^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*([\?&]\w+=\w*)*$/
11 |
12 | // 域名
13 | exports.domain = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/
14 |
15 | // 端口号
16 | exports.port = /^[1-9]$|(^[1-9][0-9]$)|(^[1-9][0-9][0-9]$)|(^[1-9][0-9][0-9][0-9]$)|(^[1-6][0-5][0-5][0-3][0-5]$)/
17 |
18 | // 子网掩码
19 | exports.subnetMask = /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/
20 |
--------------------------------------------------------------------------------
/src/lib/number.js:
--------------------------------------------------------------------------------
1 | export default {}
2 |
3 | // 纯数字
4 | exports.number = /^-?\d*\.?\d+$/
5 |
6 | // n位的数字
7 | exports.nDigitNumber = /^\d{n}$/
8 |
9 | // 至少n位数字
10 | exports.birth = /^\d{n,}$/
11 |
12 | // m-n位的数字
13 | exports.digitsRange = /^\d{m,n}$/
14 |
15 | // 整数
16 | exports.integer = /^-?\d+$/
17 |
18 | // 正整数
19 | exports.positiveInteger = /^\d+$/
20 |
21 | // 非正整数(负整数 + 0)
22 | exports.nonPositiveInteger = /^-[1-9]\d*|0$/
23 |
24 | // 负整数
25 | exports.negtiveInteger = /^-\d+$/
26 |
27 | // 正数
28 | exports.positive = /^\d*\.?\d+$/
29 |
30 | // 正数、负数、和小数
31 | exports.positiveNegative = /^(\-|\+)?\d+(\.\d+)?$/
32 |
33 | // 负数
34 | exports.negative = /^-\d*\.?\d+$/
35 |
36 | // 非负整数(正整数 + 0)
37 | exports.nonNegtiveInteger = /^[1-9]\d*|0$/
38 |
39 | // 非零的负整数
40 | exports.nonZeroNegativeInteger = /^\-[1-9][0-9]*$/
41 |
42 | // 非零的正整数
43 | exports.nonZeroPositiveInteger =/^\+?[1-9][0-9]*$/
44 |
45 | // 浮点数
46 | exports.floatPoint = /^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$/
47 |
48 | // 正浮点数
49 | exports.positiveFloatingPoint = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/
50 |
51 | // 非正浮点数(负浮点数 + 0)
52 | exports.nonPositiveFloatingPoint = /^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$/
53 |
54 | // 负浮点数
55 | exports.negativeFloatingPointNumber = /^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/
56 |
57 | // 非负浮点数(正浮点数 + 0)
58 | exports.nonNegativeFloatingPointNumber = /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$/
59 |
60 | // 非零开头的最多带两位小数的数字
61 | exports.birth = /^([1-9][0-9]*)+(.[0-9]{1,2})?$/
62 |
63 | // 有1-4位小数的正实数
64 | exports.positiveRealNumber = /^[0-9]+(.[0-9]{1,4})?$/
65 |
--------------------------------------------------------------------------------
/src/lib/other.js:
--------------------------------------------------------------------------------
1 | export default {}
2 |
3 | // 5-11位的腾讯QQ号,腾讯QQ号从10000开始
4 | exports.qq = /^[1-9][0-9]{4,11}$/
5 |
6 | // 邮箱
7 | exports.email = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
8 |
9 | // 银行卡
10 | exports.bankCard = /^([1-9]{1})(\d{15}|\d{18})$/
11 |
12 | // IE版本
13 | // exports.ieVervison = /^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$/
14 |
15 | // 微信号:6至20位,以字母开头,字母,数字,减号,下划线
16 | exports.weChat = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/
17 |
18 | // 文件的扩展名
19 | exports.fileExt = /^.*?\.(html|css|jpg)$/
20 |
21 | // 根据工信部2019年最新公布的手机号段
22 | exports.birth = /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/
23 |
24 | // 中国移动
25 | exports.phoneYidong = /^1(34[0-8]|3[5-9\d]|440|4[78]\d|5[0-27-9]\d|70[356]|78\d|8[2-478]\d|98\d)\d{7}$/
26 |
27 | // 中国联通
28 | exports.phoneLiantong = /^1(3[0-2]\d|4[56]\d|5[56]\d|66\d|70[4789]|71|7[56]\d|8[56]\d)\d{7}$/
29 |
30 | // 中国电信
31 | exports.phoneDianxin = /^1(3[3]\d|349|410|49\d|53\d|70[0-2]|7[37]\d|740|8[019]\d|99\d)\d{7}$/
32 |
33 | // 16进制颜色
34 | exports.hexColor = /#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/
35 |
36 | // 10进制值
37 | exports.decimal = /^d+.d+$/
38 |
39 | // JSON
40 | exports.json = /^\w+\(({[^()]+})\)$/
41 |
42 | // 中文名2到10位(字母,数字,下划线,减号)
43 | exports.chinaName = /^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10}){0,2}$/
44 |
45 | // 中英验证码
46 | exports.verificationCode = /^([a-zA-Z0-9]{4}|[a-zA-Z0-9]{6})$/
47 |
48 | // html标签
49 | exports.htmlTag = /<(.*)>.*<\/\1>|<(.*) \/>/
50 |
51 | // html注释
52 | exports.htmlNotes = /^!--[\s\S]*?-->$/
53 |
54 | // html片段
55 | // exports.htmlFragment = /^<([a-z]+)([^<]+)*(?:>(.*)<\\/\\\\\\1>|\\s+\\/>)$/
56 |
57 | // CSS属性
58 | exports.css = /^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1}/
59 |
60 | // 提取页面的url
61 | // exports.htmlUrl = /(a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^" rel="external nofollow" ]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)>
62 |
63 | // 普通电话、传真号码:可以"+"开头,除数字外,可含有"-"
64 | exports.fax = /^[+]{0,1}(d){1,3}[ ]?([-]?((d)|[ ]){1,12})+$/
65 |
66 | // 座机号,固定电话
67 | exports.telephone = /\d{3}-\d{8}|\d{4}-\d{7}/
68 |
69 | // 电话号码,正确格式:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX
70 | exports.tel = /^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$/
71 |
72 | // 用户名正则,4到16位(字母,数字,下划线,减号)
73 | exports.userName = /^[a-zA-Z0-9_-]{4,16}$/
74 |
75 | // 密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
76 | exports.birth = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/
77 |
78 | // 6-16位字符,区分大小写(不能是9位以下的纯数字,不含空格),必须包含大写字母
79 | exports.birth = /^(?!\d{6,8}$)(?! )(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9_]{6,16}$/
80 |
81 | // 6-16个字符,区分大小写(不能是9位以下的纯数字,不含空格)
82 | exports.birth = /^(?!\d{6,8}$)(?! )(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9_]{6,16}$/
83 |
84 | // 6-20个字符,同时包含大、小写字母及数字,不可包含特殊字符
85 | exports.birth = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/
86 |
87 | // 中国邮政编码(六位数)
88 | exports.postalCode = /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
89 |
90 | // 18位身份证
91 | exports.idCard = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/
92 |
93 | // 18位的新版身份证
94 | exports.birth = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
95 |
96 | // 全角标点符(可以有中文)
97 | exports.mark = /[\uFF00-\uFFFF]/
98 |
99 | // 中文、英文、数字包括下划线
100 | exports.zhEnNumber = /^[\\u4E00-\\u9FA5A-Za-z0-9_]+$/
101 |
102 | // 以字母开头,长度在6-18之间,只能包含字符、数字和下划线
103 | exports.beginLetter = /^[a-zA-Z]\w{5,17}$/
104 |
105 | // 是否含有 ^%&',;=?$\" 等字符
106 | exports.specialChar = /[^%&',;=?$\x22]+/
107 |
108 | // base64
109 | exports.base64 = /^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*?)\s*$/i
110 |
111 | // 64位md5
112 | exports.md5 = /^[a-f0-9]{64}$/
113 |
114 | // window下"文件夹"路径
115 | exports.windowFolder = /^[a-zA-Z]:\\(?:\w+\\?)*$/
116 |
117 | // window下"文件"路径
118 | exports.windowFile = /^[a-zA-Z]:\\(?:\w+\\)*\w+\.\w+$/
119 |
120 | // 视频链接地址
121 | exports.videoUrl = /^https?:\/\/.*?(?:swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i
122 |
123 | // 图片链接地址
124 | exports.imgUrl = /^https?:\/\/.*?(?:gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i
125 |
126 | // 统一社会信用代码
127 | exports.creditCode = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
128 |
129 | // 车牌号(新能源+非新能源)
130 | exports.licensePlate = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
131 |
132 | // 新能源车牌号
133 | exports.newEnergy = /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领 A-Z]{1}[A-HJ-NP-Z]{1}(([0-9]{5}[DF])|([DF][A-HJ-NP-Z0-9][0-9]{4}))$/
134 |
135 | // 非新能源车牌号
136 | exports.nonNewEnergy = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
137 |
138 | // 护照(包含香港、澳门)
139 | exports.passportId = /(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/
--------------------------------------------------------------------------------
/src/lib/string.js:
--------------------------------------------------------------------------------
1 |
2 | export default {}
3 |
4 | // 全角:每个全角字符占用两字节空间
5 | exports.fullAngle = /[^\uFF00-\uFFFF]/g
6 | exports.fullAngle_1 = /[^\x00-\xff]/g
7 |
8 | // 半角:每个半角字符占用一字节空间(一字节有8位),共256个编码空间
9 | exports.halfAngle = /[\x00-\xff]/g
10 |
11 | // 空白行
12 | exports.blank = /\n\s*\r/
13 |
14 | // 首尾空白字符
15 | exports.blankSpace = /^\s*|\s*$/
16 |
17 | // 带有~的字符
18 | exports.wave = /[^~\x22]+/i
19 |
20 | // xml文件
21 | exports.xml = /^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$/
22 |
23 | // 由26个英文字母组成的字符串
24 | exports.english = /^[A-Za-z]+$/
25 |
26 | // 由数字和26个英文字母组成的字符串
27 | exports.englishNumber = /^[A-Za-z0-9]+$/
28 |
29 | // 由数字、26个英文字母或者下划线组成的字符串
30 | exports.englishNumberSymbol = /^\w+$/
31 |
32 | // URL
33 | exports.url = /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i
34 |
35 | // URI
36 | exports.uri = /[a-zA-z]+:\/\/[^\s]*/
37 |
38 | // 匹配双字节字符(包括汉字在内, 一个双字节字符长度计2,ASCII字符计1)
39 | exports.doubleCharacter = /[^\x00-\xff]/
40 |
41 | // ASCII
42 | exports.ascii = /\x20-\x7f/
43 |
44 | // GBK下的中文
45 | exports.gbkChina = /\xa1-\xff/
46 |
47 | // 中文
48 | exports.china = /[\u4E00-\u9FA5]/
49 |
50 | // Unicode编码中的汉字范围
51 | exports.chinaChar = /^[\u2E80-\u9FFF]+$/
52 |
53 | // 韩文
54 | exports.korean = /^\x3130-\x318F$/
55 |
56 | // 日文
57 | exports.japanese = /^\u0800-\u4e00$/
--------------------------------------------------------------------------------