├── .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]+)([^<]+)(?:>(.)|\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 | [![MIT](http://api.haizlin.cn/api?mod=interview&ctr=issues&act=generateSVG&type=regular)](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$/ --------------------------------------------------------------------------------