如果我们想对字符串进行相关(增、删、改、查、检索)操作,就可以用接下来的正则表达式实现
什么是正则表达式
- 正则表达式是用于匹配字符串中字符组合的模式
- 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本
那么今天为大家分享一个整理完整的常用正则表达式的规则与示例,希望对你学前端这条路上更加有帮助!
一、基础匹配规则
1. 字符匹配
| 表达式 | 描述 |
|---|---|
| [abc] | 字符集。匹配集合中所含的任一字符。 |
| [^abc] | 否定字符集。匹配任何不在集合中的字符。 |
| [a-z] | 字符范围。匹配指定范围内的任意字符。 |
| . | 匹配除换行符以外的任何单个字符。 |
| \ | 转义字符。 |
| \w | 匹配任何字母数字,包括下划线(等价于[A-Za-z0-9_])。 |
| \W | 匹配任何非字母数字(等价于[^A-Za-z0-9_])。 |
| \d | 数字。匹配任何数字。 |
| \D | 非数字。匹配任何非数字字符。 |
| \s | 空白。匹配任何空白字符,包括空格、制表符等。 |
| \S | 非空白。匹配任何非空白字符。 |
左右滑动观看完整的内容
2. 分组和引用
| 表达式 | 描述 |
|---|---|
| (expression) | 分组。匹配括号里的整个表达式。 |
| (?:expression) | 非捕获分组。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。 |
| \num | 对前面所匹配分组的引用。比如(\d)\1可以匹配两个相同的数字,(Code)(Sheep)\1\2则可以匹配CodeSheepCodeSheep。 |
左右滑动观看完整的内容
3. 锚点、边界
| 表达式 | 描述 |
|---|---|
| ^ | 匹配字符串或行开头。 |
| $ | 匹配字符串或行结尾。 |
| \b | 匹配单词边界。比如Sheep\b可以匹配CodeSheep末尾的Sheep,不能匹配CodeSheepCode中的Sheep |
| \B | 匹配非单词边界。比如Code\B可以匹配HelloCodeSheep中的Code,不能匹配HelloCode中的Code。 |
左右滑动观看完整的内容
4. 数量匹配
| 表达式 | 描述 | |
|---|---|---|
| ? | 匹配前面的表达式0个或1个。即表示可选项。 | |
| + | 匹配前面的表达式至少1个。 | |
| * | 匹配前面的表达式0个或多个。 | |
| 或运算符。并集,可以匹配符号前后的表达式。 | ||
| {m} | 匹配前面的表达式m个。 | |
| {m,} | 匹配前面的表达式最少m个。 | |
| {m,n} | 匹配前面的表达式最少m个,最多n个。 |
左右滑动观看完整的内容
5. 预查断言
| 表达式 | 描述 |
|---|---|
| (?=) | 正向预查。比如Code(?=Sheep)能匹配CodeSheep中的Code,但不能匹配CodePig中的Code。 |
| (?!) | 正向否定预查。比如Code(?!Sheep)不能匹配CodeSheep中的Code,但能匹配CodePig中的Code。 |
| (?<=) | 反向预查。比如(?<=Code)Sheep能匹配CodeSheep中的Sheep,但不能匹配ReadSheep中的Sheep。 |
| (?<!) | 反向否定预查。比如(?<!Code)Sheep不能匹配CodeSheep中的Sheep,但能匹配ReadSheep中的Sheep。 |
左右滑动观看完整的内容
6. 特殊标志
| 表达式 | 描述 |
|---|---|
| /.../i | 忽略大小写。 |
| /.../g | 全局匹配。 |
| /.../m | 多行修饰符。用于多行匹配。 |
左右滑动观看完整的内容
二、常用正则表达式示例
1. 数字校验
| 描述 | 正则表达式 | 备注 | |||
|---|---|---|---|---|---|
| 数字 | ^[0-9]*$ | ||||
| n位数字 | ^\d{n}$ | ||||
| 至少n位数字 | ^\d{n,}$ | ||||
| m~n位数字 | ^\d{m,n}$ | ||||
| 整数 | ^(-?[1-9]\d*)$ | 非0开头,包括正整数和负整数 | |||
| 正整数 | ^[1-9]\d*$ | ||||
| 负整数 | ^-[1-9]\d*$ | ||||
| 非负整数 | ^(([1-9]\d*) | 0)$ | |||
| 非正整数 | ^((-[1-9]\d*) | 0)$ | |||
| 浮点数 | ^-?(?:[1-9]\d*.\d* | 0.\d*[1-9]\d* | 0.0+ | 0)$ | 包括正浮点数和负浮点数 |
| 正浮点数 | ^(?:[1-9]\d*.\d* | 0.\d*[1-9]\d*)$ | |||
| 负浮点数 | ^-(?:[1-9]\d*.\d* | 0.\d*[1-9]\d*)$ | |||
| 非正浮点数 | ^(?:-(?:[1-9]\d*.\d+ | 0.\d*[1-9]\d*) | 0.0+ | 0)$ | 包含0 |
| 非负浮点数 | ^(?:[1-9]\d*.\d+ | 0.\d+ | 0.0+ | 0)$ | 包含0 |
| 仅一位小数 | ^-?(?:0 | [1-9][0-9]*).[0-9]{1}$ | |||
| 最少一位小数 | ^-?(?:0 | [1-9][0-9]*).[0-9]{1,}$ | |||
| 最多两位小数 | ^-?(?:0 | [1-9][0-9]*).[0-9]{1,2}$ | |||
| 连续重复的数字 | ^(\d)\1+$ | 例如:111,222 |
左右滑动观看完整的内容
- 字符校验
| 描述 | 正则表达式 | 备注 | |
|---|---|---|---|
| 中文 | ^[\u4E00-\u9FA5]+$ | ||
| 全角字符 | ^[\uFF00-\uFFFF]+$ | ||
| 半角字符 | ^[\u0000-\u00FF]+$ | ||
| 英文字符串(大写) | ^[A-Z]+$ | ||
| 英文字符串(小写) | ^[a-z]+$ | ||
| 英文字符串(不区分大小写) | ^[A-Za-z]+$ | ||
| 中文和数字 | ^(?:[\u4E00-\u9FA5]{0,} | \d)+$ | |
| 英文和数字 | ^[A-Za-z0-9]+$ | ||
| 数字、英文字母或者下划线组成的字符串 | ^\w+$ | ||
| 中文、英文、数字包括下划线 | ^[\u4E00-\u9FA5\w]+$ | ||
| 不含字母的字符串 | ^[^A-Za-z]*$ | ||
| 连续重复的字符串 | ^(.)\1+$ | 例如:aa,bb | |
| 长度为n的字符串 | ^.{n}$ | ||
| ASCII | ^[ -~]$ |
左右滑动观看完整的内容
3. 日期和时间校验
| 描述 | 正则表达式 | 备注 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 日期 | ^\d{1,4}-(?:1[0-2] | 0?[1-9])-(?:0?[1-9] | [1-2]\d | 30 | 31)$ | 弱校验,<br /例如:2022-06-12 | ||||||||||
| 日期 | ^(?:(?!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)$ | 严格校验,考虑平闰年 |
| 时间 | ^(?:1[0-2] | 0?[1-9]):[0-5]\d:[0-5]\d$ | 12小时制,例如:11:21:31 | |||||||||||||
| 时间 | ^(?:[01]\d | 2[0-3]):[0-5]\d:[0-5]\d$ | 24小时制,例如:23:21:31 | |||||||||||||
| 日期+时间 | ^(\d{1,4}-(?:1[0-2] | 0?[1-9])-(?:0?[1-9] | [1-2]\d | 30 | 31)) ((?:[01]\d | 2[0-3]):[0-5]\d:[0-5]\d)$ | 例如:2000-11-11 23:20:21 |
左右滑动观看完整的内容
4. 日常生活相关
| 描述 | 正则表达式 | 备注 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 中文名 | ^[\u4E00-\u9FA5·]{2,16}$ | |||||||||
| 英文名 | ^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$ | |||||||||
| 车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$ | 不含新能源 | ||||||||
| 车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](?:(?:[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]) | (?:(?:\d{5}[A-HJK]) | (?:[A-HJK][A-HJ-NP-Z0-9][0-9]{4})))$ | 包含新能源 | ||||||
| 火车车次 | ^[GCDZTSPKXLY1-9]\d{1,4}$ | 例如:G1234 | ||||||||
| 手机号 | ^(?:(?:+ | 00)86)?1[3-9]\d{9}$ | 弱匹配 | |||||||
| 手机号 | ^(?:(?:+ | 00)86)?1(?:(?:3[\d]) | (?:4[5-79]) | (?:5[0-35-9]) | (?:6[5-7]) | (?:7[0-8]) | (?:8[\d]) | (?:9[189]))\d{8}$ | 严格匹配 | |
| 固话号码 | ^(?:(?:\d{3}-)?\d{8} | ^(?:\d{4}-)?\d{7,8})(?:-\d+)?$ | ||||||||
| 手机IMEI码 | ^\d{15,17}$ | 一般是15位 | ||||||||
| 邮编 | ^(?: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}$ | 例如:211100 |
| 统一社会信用代码 | ^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$ | |||||||||
| 身份证号码(1代) | ^[1-9]\d{7}(?:0\d | 10 | 11 | 12)(?:0[1-9] | [1-2][\d] | 30 | 31)\d{3}$ | 15位数字 | ||
| 身份证号码(2代) | ^[1-9]\d{5}(?:18 | 19 | 20)\d{2}(?:0[1-9] | 10 | 11 | 12)(?:0[1-9] | [1-2]\d | 30 | 31)\d{3}[0-9Xx]$ | 18位数字 |
| QQ号 | ^[1-9][0-9]{4,}$ | 一般是5到10位 | ||||||||
| 微信号 | ^[a-zA-Z][-_a-zA-Z0-9]{5,19}$ | 一般6~20位,字母开头,可包含字母、数字、-、_,不含特殊字符 | ||||||||
| 股票代码 | ^(s[hz] | S[HZ])(000[\d]{3} | 002[\d]{3} | 300[\d]{3} | 600[\d]{3} | 60[\d]{4})$ | A股,例如:600519 | |||
| 银行卡卡号 | ^[1-9]{1}(?:\d{15} | \d{18})$ | 一般为19位 |
左右滑动观看完整的内容
- 互联网相关
| 描述 | 正则表达式 | 备注 | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 域名 | ^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 例如:r2coding.com | |||||||||||||||||||||||||||||||
| 网址 | ^(?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 例如:https://www.***.com/ | |||||||||||||||||||||||||||||||
| 带端口号的网址(或IP) | ^(?:https?://)?[\w-]+(?:.[\w-]+)+:\d{1,5}/?$ | 如:http://127.0.0.1:8888/ | |||||||||||||||||||||||||||||||
| URL | ^https?://(?:www.)?[-a-zA-Z0-9@:%.+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%+.~#?&//=]*)$ | 例如:https://www.***.com/#/README?id=1 | |||||||||||||||||||||||||||||||
| 邮箱email | ^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 支持中文,例如:codesheep@cs.com | |||||||||||||||||||||||||||||||
| 用户名 | ^[a-zA-Z0-9_-]{4,20}$ | 4到20位 | |||||||||||||||||||||||||||||||
| 弱密码 | ^[\w]{6,16}$ | 6~16位,包含大小写字母和数字的组合 | |||||||||||||||||||||||||||||||
| 强密码 | ^.(?=.{6,})(?=.\d)(?=.[A-Z])(?=.[a-z])(?=.*[!@.# | 至少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 | |||||||||||||||||||||||||||||||
| 端口号 | ^(?:[0-9] | [1-9][0-9]{1,3} | [1-5][0-9]{4} | 6[0-4][0-9]{3} | 65[0-4][0-9]{2} | 655[0-2][0-9] | 6553[0-5])$ | 例如:65535 | |||||||||||||||||||||||||
| IPv4地址 | ^(?:(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5]).){3}(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5])$ | 例如:192.168.31.1 | |||||||||||||||||||||||
| IPv4地址+端口 | ^(?:(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5]).){3}(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5])(?::(?:[0-9] | [1-9][0-9]{1,3} | [1-5][0-9]{4} | 6[0-4][0-9]{3} | 65[0-4][0-9]{2} | 655[0-2][0-9] | 6553[0-5]))?$ | 例如:192.168.31.1:8080 | |||||||||||||||||
| IPv6地址 | ^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,7}: | ([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2} | ([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3} | ([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4} | ([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5} | [0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}) | :((:[0-9a-fA-F]{1,4}){1,7} | :) | fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,} | ::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]) | ([0-9a-fA-F]{1,4}:){1,4}:((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]))$ | 例如: CDCD:910A:2222:5498:8475:1111:3900:2020 | |||||||||||
| IPv6地址+端口 | ^[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,7}: | ([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2} | ([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3} | ([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4} | ([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5} | [0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}) | :((:[0-9a-fA-F]{1,4}){1,7} | :) | fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,} | ::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]) | ([0-9a-fA-F]{1,4}:){1,4}:((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]))](?::(?:[0-9] | [1-9][0-9]{1,3} | [1-5][0-9]{4} | 6[0-4][0-9]{3} | 65[0-4][0-9]{2} | 655[0-2][0-9] | 6553[0-5]))?$ | 例如:[ CDCD:910A:2222:5498:8475:1111:3900:2020]:9800 | |||||
| 子网掩码 | ^(?:254 | 252 | 248 | 240 | 224 | 192 | 128).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.(?:255 | 254 | 252 | 248 | 240 | 224 | 192 | 128 | 0)$ | 例如:255.255.255.0 |
| MAC地址 | ^(?:(?:[a-f0-9A-F]{2}:){5} | (?:[a-f0-9A-F]{2}-){5})[a-f0-9A-F]{2}$ | |||||||||||||||||||||||||||||||
| Version版本号 | ^\d+(?:.\d+){2}$ | 例如:12.1.1 | |||||||||||||||||||||||||||||||
| 图片后缀 | .(gif | png | jpg | jpeg | webp | svg | psd | bmp | tif)+ | 可按需增删扩展名集合 | |||||||||||||||||||||||
| 视频后缀 | .(swf | avi | flv | mpg | rm | mov | wav | asf | 3gp | mkv | rmvb | mp4)+ | 可按需增删扩展名集合 | ||||||||||||||||||||
| 图片链接 | (?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(gif | png | jpg | jpeg | webp | svg | psd | bmp | tif) | 可按需增删扩展名集合 | |||||||||||||||||||||||
| 视频链接 | (?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(swf | avi | flv | mpg | rm | mov | wav | asf | 3gp | mkv | rmvb | mp4) | 可按需增删扩展名集合 | ||||||||||||||||||||
| 迅雷链接 | thunderx?://[a-zA-Z\d]+= | ||||||||||||||||||||||||||||||||
| ed2k链接 | ed2k://|file|.+|/ | ||||||||||||||||||||||||||||||||
| 磁力链接 | magnet:?xt=urn:btih:[0-9a-fA-F]{40,}.* |
左右滑动观看完整的内容
5. 其他
| 描述 | 正则表达式 | 备注 | |||||
|---|---|---|---|---|---|---|---|
| MD5格式 | ^(?:[a-f\d]{32} | [A-F\d]{32})$ | 32位MD5,例如: 7552E7071B118CBFFEC8C930455B4297 | ||||
| BASE64格式 | ^\s*data:(?:[a-z]+/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!&',()*+;=\-._~:@/?%\s]*?)\s* | 例如:data:image/jpeg;base64,xxxx== | |||||
| UUID | ^[a-f\d]{4}(?:[a-f\d]{4}-){4}[a-f\d]{12}$ | 例如: 94f9d45a-71b0-4b3c-b69d-20c4bc9c8fdd | |||||
| 16进制 | ^[A-Fa-f0-9]+$ | 例如:FFFFFF | |||||
| 16进制颜色 | ^#?([0-9a-fA-F]{3} | [0-9a-fA-F]{6})$ | 例如:#FFFFFF | ||||
| SQL语句 | ^(?:select | drop | delete | create | update | insert).*$ | |
| Java包名 | ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ | 例如:com.r2coding.controller | |||||
| 文件扩展名 | .(?:doc | txt) | 可按需增删扩展名集合 | ||||
| Windows文件路径 | ^[a-zA-Z]:(?:\[\w\u4E00-\u9FA5\s]+)+[.\w\u4E00-\u9FA5\s]+$ | 例如:C:\Users\Administrator\Desktop\a.txt | |||||
| Windows文件夹路径 | ^[a-zA-Z]:(?:\[\w\u4E00-\u9FA5\s]+)+$ | 例如:C:\Users\Administrator\Desktop | |||||
| Linux文件路径 | ^/(?:[^/]+/)*[^/]+$ | 例如:/root/library/a.txt | |||||
| Linux文件夹路径 | ^/(?:[^/]+/)*$ | 例如:/root/library/ |
左右滑动观看完整的内容
如果对你有帮助,记得点赞支持哦,目前我们的系统班正在讲解JavaScript正则表达式,这个课程讲完系统班的JavaScript阶段就算完结了,正式开始进入ES6阶段了,这几个月我们在JavaScript课程中融入了大量的面试题、算法以及底层原理知识,目的就是为了帮助大家夯实基础,查漏补缺,有 扎实的JavaScript基础,对于学到后面阶段更加有帮助!这也是2023年通向职业道路,面试求职必须要懂得的技术能力!感兴趣可以联系我参与!
为了更好的让大家认识到JavaScript的精髓,我们在三十天计划群里推出了几节非常重要的JavaScript课程体系,而且每个系列知识点都保障是完整的。感兴趣可以通过下方的练习方式参与课程哦 。如果你正在学习JavaScript,我们已经在三十天计划中完成了4个综合项目实战,那不妨可以听下这个课程体系,三十天计划群里还提供了算法、数组等知识体系!如果我们想对字符串进行相关(增、删、改、查、检索)操作,就可以用接下来的正则表达式实现
什么是正则表达式
- 正则表达式是用于匹配字符串中字符组合的模式
- 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本
那么今天为大家分享一个整理完整的常用正则表达式的规则与示例,希望对你学前端这条路上更加有帮助!
一、基础匹配规则
1. 字符匹配
| 表达式 | 描述 |
|---|---|
| [abc] | 字符集。匹配集合中所含的任一字符。 |
| [^abc] | 否定字符集。匹配任何不在集合中的字符。 |
| [a-z] | 字符范围。匹配指定范围内的任意字符。 |
| . | 匹配除换行符以外的任何单个字符。 |
| \ | 转义字符。 |
| \w | 匹配任何字母数字,包括下划线(等价于[A-Za-z0-9_])。 |
| \W | 匹配任何非字母数字(等价于[^A-Za-z0-9_])。 |
| \d | 数字。匹配任何数字。 |
| \D | 非数字。匹配任何非数字字符。 |
| \s | 空白。匹配任何空白字符,包括空格、制表符等。 |
| \S | 非空白。匹配任何非空白字符。 |
左右滑动观看完整的内容
2. 分组和引用
| 表达式 | 描述 |
|---|---|
| (expression) | 分组。匹配括号里的整个表达式。 |
| (?:expression) | 非捕获分组。匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用。 |
| \num | 对前面所匹配分组的引用。比如(\d)\1可以匹配两个相同的数字,(Code)(Sheep)\1\2则可以匹配CodeSheepCodeSheep。 |
左右滑动观看完整的内容
3. 锚点、边界
| 表达式 | 描述 |
|---|---|
| ^ | 匹配字符串或行开头。 |
| $ | 匹配字符串或行结尾。 |
| \b | 匹配单词边界。比如Sheep\b可以匹配CodeSheep末尾的Sheep,不能匹配CodeSheepCode中的Sheep |
| \B | 匹配非单词边界。比如Code\B可以匹配HelloCodeSheep中的Code,不能匹配HelloCode中的Code。 |
左右滑动观看完整的内容
4. 数量匹配
| 表达式 | 描述 | |
|---|---|---|
| ? | 匹配前面的表达式0个或1个。即表示可选项。 | |
| + | 匹配前面的表达式至少1个。 | |
| * | 匹配前面的表达式0个或多个。 | |
| 或运算符。并集,可以匹配符号前后的表达式。 | ||
| {m} | 匹配前面的表达式m个。 | |
| {m,} | 匹配前面的表达式最少m个。 | |
| {m,n} | 匹配前面的表达式最少m个,最多n个。 |
左右滑动观看完整的内容
5. 预查断言
| 表达式 | 描述 |
|---|---|
| (?=) | 正向预查。比如Code(?=Sheep)能匹配CodeSheep中的Code,但不能匹配CodePig中的Code。 |
| (?!) | 正向否定预查。比如Code(?!Sheep)不能匹配CodeSheep中的Code,但能匹配CodePig中的Code。 |
| (?<=) | 反向预查。比如(?<=Code)Sheep能匹配CodeSheep中的Sheep,但不能匹配ReadSheep中的Sheep。 |
| (?<!) | 反向否定预查。比如(?<!Code)Sheep不能匹配CodeSheep中的Sheep,但能匹配ReadSheep中的Sheep。 |
左右滑动观看完整的内容
6. 特殊标志
| 表达式 | 描述 |
|---|---|
| /.../i | 忽略大小写。 |
| /.../g | 全局匹配。 |
| /.../m | 多行修饰符。用于多行匹配。 |
左右滑动观看完整的内容
二、常用正则表达式示例
1. 数字校验
| 描述 | 正则表达式 | 备注 | |||
|---|---|---|---|---|---|
| 数字 | ^[0-9]*$ | ||||
| n位数字 | ^\d{n}$ | ||||
| 至少n位数字 | ^\d{n,}$ | ||||
| m~n位数字 | ^\d{m,n}$ | ||||
| 整数 | ^(-?[1-9]\d*)$ | 非0开头,包括正整数和负整数 | |||
| 正整数 | ^[1-9]\d*$ | ||||
| 负整数 | ^-[1-9]\d*$ | ||||
| 非负整数 | ^(([1-9]\d*) | 0)$ | |||
| 非正整数 | ^((-[1-9]\d*) | 0)$ | |||
| 浮点数 | ^-?(?:[1-9]\d*.\d* | 0.\d*[1-9]\d* | 0.0+ | 0)$ | 包括正浮点数和负浮点数 |
| 正浮点数 | ^(?:[1-9]\d*.\d* | 0.\d*[1-9]\d*)$ | |||
| 负浮点数 | ^-(?:[1-9]\d*.\d* | 0.\d*[1-9]\d*)$ | |||
| 非正浮点数 | ^(?:-(?:[1-9]\d*.\d+ | 0.\d*[1-9]\d*) | 0.0+ | 0)$ | 包含0 |
| 非负浮点数 | ^(?:[1-9]\d*.\d+ | 0.\d+ | 0.0+ | 0)$ | 包含0 |
| 仅一位小数 | ^-?(?:0 | [1-9][0-9]*).[0-9]{1}$ | |||
| 最少一位小数 | ^-?(?:0 | [1-9][0-9]*).[0-9]{1,}$ | |||
| 最多两位小数 | ^-?(?:0 | [1-9][0-9]*).[0-9]{1,2}$ | |||
| 连续重复的数字 | ^(\d)\1+$ | 例如:111,222 |
左右滑动观看完整的内容
- 字符校验
| 描述 | 正则表达式 | 备注 | |
|---|---|---|---|
| 中文 | ^[\u4E00-\u9FA5]+$ | ||
| 全角字符 | ^[\uFF00-\uFFFF]+$ | ||
| 半角字符 | ^[\u0000-\u00FF]+$ | ||
| 英文字符串(大写) | ^[A-Z]+$ | ||
| 英文字符串(小写) | ^[a-z]+$ | ||
| 英文字符串(不区分大小写) | ^[A-Za-z]+$ | ||
| 中文和数字 | ^(?:[\u4E00-\u9FA5]{0,} | \d)+$ | |
| 英文和数字 | ^[A-Za-z0-9]+$ | ||
| 数字、英文字母或者下划线组成的字符串 | ^\w+$ | ||
| 中文、英文、数字包括下划线 | ^[\u4E00-\u9FA5\w]+$ | ||
| 不含字母的字符串 | ^[^A-Za-z]*$ | ||
| 连续重复的字符串 | ^(.)\1+$ | 例如:aa,bb | |
| 长度为n的字符串 | ^.{n}$ | ||
| ASCII | ^[ -~]$ |
左右滑动观看完整的内容
3. 日期和时间校验
| 描述 | 正则表达式 | 备注 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 日期 | ^\d{1,4}-(?:1[0-2] | 0?[1-9])-(?:0?[1-9] | [1-2]\d | 30 | 31)$ | 弱校验,<br /例如:2022-06-12 | ||||||||||
| 日期 | ^(?:(?!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)$ | 严格校验,考虑平闰年 |
| 时间 | ^(?:1[0-2] | 0?[1-9]):[0-5]\d:[0-5]\d$ | 12小时制,例如:11:21:31 | |||||||||||||
| 时间 | ^(?:[01]\d | 2[0-3]):[0-5]\d:[0-5]\d$ | 24小时制,例如:23:21:31 | |||||||||||||
| 日期+时间 | ^(\d{1,4}-(?:1[0-2] | 0?[1-9])-(?:0?[1-9] | [1-2]\d | 30 | 31)) ((?:[01]\d | 2[0-3]):[0-5]\d:[0-5]\d)$ | 例如:2000-11-11 23:20:21 |
左右滑动观看完整的内容
4. 日常生活相关
| 描述 | 正则表达式 | 备注 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 中文名 | ^[\u4E00-\u9FA5·]{2,16}$ | |||||||||
| 英文名 | ^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$ | |||||||||
| 车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$ | 不含新能源 | ||||||||
| 车牌号 | ^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](?:(?:[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]) | (?:(?:\d{5}[A-HJK]) | (?:[A-HJK][A-HJ-NP-Z0-9][0-9]{4})))$ | 包含新能源 | ||||||
| 火车车次 | ^[GCDZTSPKXLY1-9]\d{1,4}$ | 例如:G1234 | ||||||||
| 手机号 | ^(?:(?:+ | 00)86)?1[3-9]\d{9}$ | 弱匹配 | |||||||
| 手机号 | ^(?:(?:+ | 00)86)?1(?:(?:3[\d]) | (?:4[5-79]) | (?:5[0-35-9]) | (?:6[5-7]) | (?:7[0-8]) | (?:8[\d]) | (?:9[189]))\d{8}$ | 严格匹配 | |
| 固话号码 | ^(?:(?:\d{3}-)?\d{8} | ^(?:\d{4}-)?\d{7,8})(?:-\d+)?$ | ||||||||
| 手机IMEI码 | ^\d{15,17}$ | 一般是15位 | ||||||||
| 邮编 | ^(?: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}$ | 例如:211100 |
| 统一社会信用代码 | ^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$ | |||||||||
| 身份证号码(1代) | ^[1-9]\d{7}(?:0\d | 10 | 11 | 12)(?:0[1-9] | [1-2][\d] | 30 | 31)\d{3}$ | 15位数字 | ||
| 身份证号码(2代) | ^[1-9]\d{5}(?:18 | 19 | 20)\d{2}(?:0[1-9] | 10 | 11 | 12)(?:0[1-9] | [1-2]\d | 30 | 31)\d{3}[0-9Xx]$ | 18位数字 |
| QQ号 | ^[1-9][0-9]{4,}$ | 一般是5到10位 | ||||||||
| 微信号 | ^[a-zA-Z][-_a-zA-Z0-9]{5,19}$ | 一般6~20位,字母开头,可包含字母、数字、-、_,不含特殊字符 | ||||||||
| 股票代码 | ^(s[hz] | S[HZ])(000[\d]{3} | 002[\d]{3} | 300[\d]{3} | 600[\d]{3} | 60[\d]{4})$ | A股,例如:600519 | |||
| 银行卡卡号 | ^[1-9]{1}(?:\d{15} | \d{18})$ | 一般为19位 |
左右滑动观看完整的内容
- 互联网相关
| 描述 | 正则表达式 | 备注 | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 域名 | ^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 例如:r2coding.com | |||||||||||||||||||||||||||||||
| 网址 | ^(?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 例如:https://www.***.com/ | |||||||||||||||||||||||||||||||
| 带端口号的网址(或IP) | ^(?:https?://)?[\w-]+(?:.[\w-]+)+:\d{1,5}/?$ | 如:http://127.0.0.1:8888/ | |||||||||||||||||||||||||||||||
| URL | ^https?://(?:www.)?[-a-zA-Z0-9@:%.+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()!@:%+.~#?&//=]*)$ | 例如:https://www.***.com/#/README?id=1 | |||||||||||||||||||||||||||||||
| 邮箱email | ^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$ | 支持中文,例如:codesheep@cs.com | |||||||||||||||||||||||||||||||
| 用户名 | ^[a-zA-Z0-9_-]{4,20}$ | 4到20位 | |||||||||||||||||||||||||||||||
| 弱密码 | ^[\w]{6,16}$ | 6~16位,包含大小写字母和数字的组合 | |||||||||||||||||||||||||||||||
| 强密码 | ^.(?=.{6,})(?=.\d)(?=.[A-Z])(?=.[a-z])(?=.*[!@.# | 至少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 | |||||||||||||||||||||||||||||||
| 端口号 | ^(?:[0-9] | [1-9][0-9]{1,3} | [1-5][0-9]{4} | 6[0-4][0-9]{3} | 65[0-4][0-9]{2} | 655[0-2][0-9] | 6553[0-5])$ | 例如:65535 | |||||||||||||||||||||||||
| IPv4地址 | ^(?:(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5]).){3}(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5])$ | 例如:192.168.31.1 | |||||||||||||||||||||||
| IPv4地址+端口 | ^(?:(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5]).){3}(?:\d | [1-9]\d | 1\d\d | 2[0-4]\d | 25[0-5])(?::(?:[0-9] | [1-9][0-9]{1,3} | [1-5][0-9]{4} | 6[0-4][0-9]{3} | 65[0-4][0-9]{2} | 655[0-2][0-9] | 6553[0-5]))?$ | 例如:192.168.31.1:8080 | |||||||||||||||||
| IPv6地址 | ^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,7}: | ([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2} | ([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3} | ([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4} | ([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5} | [0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}) | :((:[0-9a-fA-F]{1,4}){1,7} | :) | fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,} | ::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]) | ([0-9a-fA-F]{1,4}:){1,4}:((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]))$ | 例如: CDCD:910A:2222:5498:8475:1111:3900:2020 | |||||||||||
| IPv6地址+端口 | ^[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,7}: | ([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4} | ([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2} | ([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3} | ([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4} | ([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5} | [0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}) | :((:[0-9a-fA-F]{1,4}){1,7} | :) | fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,} | ::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]) | ([0-9a-fA-F]{1,4}:){1,4}:((25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5] | (2[0-4] | 1{0,1}[0-9]){0,1}[0-9]))](?::(?:[0-9] | [1-9][0-9]{1,3} | [1-5][0-9]{4} | 6[0-4][0-9]{3} | 65[0-4][0-9]{2} | 655[0-2][0-9] | 6553[0-5]))?$ | 例如:[ CDCD:910A:2222:5498:8475:1111:3900:2020]:9800 | |||||
| 子网掩码 | ^(?:254 | 252 | 248 | 240 | 224 | 192 | 128).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.(?:255 | 254 | 252 | 248 | 240 | 224 | 192 | 128 | 0)$ | 例如:255.255.255.0 |
| MAC地址 | ^(?:(?:[a-f0-9A-F]{2}:){5} | (?:[a-f0-9A-F]{2}-){5})[a-f0-9A-F]{2}$ | |||||||||||||||||||||||||||||||
| Version版本号 | ^\d+(?:.\d+){2}$ | 例如:12.1.1 | |||||||||||||||||||||||||||||||
| 图片后缀 | .(gif | png | jpg | jpeg | webp | svg | psd | bmp | tif)+ | 可按需增删扩展名集合 | |||||||||||||||||||||||
| 视频后缀 | .(swf | avi | flv | mpg | rm | mov | wav | asf | 3gp | mkv | rmvb | mp4)+ | 可按需增删扩展名集合 | ||||||||||||||||||||
| 图片链接 | (?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(gif | png | jpg | jpeg | webp | svg | psd | bmp | tif) | 可按需增删扩展名集合 | |||||||||||||||||||||||
| 视频链接 | (?:https?://)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(?:.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.+.(swf | avi | flv | mpg | rm | mov | wav | asf | 3gp | mkv | rmvb | mp4) | 可按需增删扩展名集合 | ||||||||||||||||||||
| 迅雷链接 | thunderx?://[a-zA-Z\d]+= | ||||||||||||||||||||||||||||||||
| ed2k链接 | ed2k://|file|.+|/ | ||||||||||||||||||||||||||||||||
| 磁力链接 | magnet:?xt=urn:btih:[0-9a-fA-F]{40,}.* |
左右滑动观看完整的内容
5. 其他
| 描述 | 正则表达式 | 备注 | |||||
|---|---|---|---|---|---|---|---|
| MD5格式 | ^(?:[a-f\d]{32} | [A-F\d]{32})$ | 32位MD5,例如: 7552E7071B118CBFFEC8C930455B4297 | ||||
| BASE64格式 | ^\s*data:(?:[a-z]+/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!&',()*+;=\-._~:@/?%\s]*?)\s* | 例如:data:image/jpeg;base64,xxxx== | |||||
| UUID | ^[a-f\d]{4}(?:[a-f\d]{4}-){4}[a-f\d]{12}$ | 例如: 94f9d45a-71b0-4b3c-b69d-20c4bc9c8fdd | |||||
| 16进制 | ^[A-Fa-f0-9]+$ | 例如:FFFFFF | |||||
| 16进制颜色 | ^#?([0-9a-fA-F]{3} | [0-9a-fA-F]{6})$ | 例如:#FFFFFF | ||||
| SQL语句 | ^(?:select | drop | delete | create | update | insert).*$ | |
| Java包名 | ^(?:[a-zA-Z_]\w*)+(?:[.][a-zA-Z_]\w*)+$ | 例如:com.r2coding.controller | |||||
| 文件扩展名 | .(?:doc | txt) | 可按需增删扩展名集合 | ||||
| Windows文件路径 | ^[a-zA-Z]:(?:\[\w\u4E00-\u9FA5\s]+)+[.\w\u4E00-\u9FA5\s]+$ | 例如:C:\Users\Administrator\Desktop\a.txt | |||||
| Windows文件夹路径 | ^[a-zA-Z]:(?:\[\w\u4E00-\u9FA5\s]+)+$ | 例如:C:\Users\Administrator\Desktop | |||||
| Linux文件路径 | ^/(?:[^/]+/)*[^/]+$ | 例如:/root/library/a.txt | |||||
| Linux文件夹路径 | ^/(?:[^/]+/)*$ | 例如:/root/library/ |
左右滑动观看完整的内容
如果对你有帮助,记得点赞支持哦,目前我们的系统班正在讲解JavaScript正则表达式,这个课程讲完系统班的JavaScript阶段就算完结了,正式开始进入ES6阶段了,这几个月我们在JavaScript课程中融入了大量的面试题、算法以及底层原理知识,目的就是为了帮助大家夯实基础,查漏补缺,有 扎实的JavaScript基础,对于学到后面阶段更加有帮助!这也是2023年通向职业道路,面试求职必须要懂得的技术能力!感兴趣可以联系我参与!
为了更好的让大家认识到JavaScript的精髓,我们在三十天计划群里推出了几节非常重要的JavaScript课程体系,而且每个系列知识点都保障是完整的。感兴趣可以通过下方的练习方式参与课程哦 。如果你正在学习JavaScript,我们已经在三十天计划中完成了4个综合项目实战,那不妨可以听下这个课程体系,三十天计划群里还提供了算法、数组等知识体系!
前端工程师成长方法
更多完整 JavaScript 课程体系在我们的系统班里有完整的呈现,包含了 JavaScript 基础篇、重点、算法、原理、面试题、实战案例讲解!同时也为你提供了前端高级工程师成长体系!(详细看下图内容)
如果需要深度学习的同学可以联系助理老师了解详细的课程以及课程的报名方式!(不定期会推出活动,有大额优惠券推出,活动详情联系助理老师了解即可!)如果你才开始学习前端,那么可以先学习我们的三十天计划(零基础的同学报名系统班同学可以和老师沟通制定学习计划,可以得到更快的成长!)
为帮助到一部分同学不走弯路,真正达到一线互联网大厂前端项目研发要求,首次实力宠粉,打造了《30天挑战学习计划》,内容如下:
HTML/HTML5,CSS/CSS3,JavaScript,真实企业项目开发,云服务器部署上线,从入门到精通
- PC端项目开发(1个)
- 移动WebApp开发(2个)
- 多端响应式开发(1个)
共4大完整的项目开发 !一行一行代码带领实践开发,实际企业开发怎么做我们就是怎么做。从学习一开始就进入工作状态,省得浪费时间。
从学习一开始就同步使用 Git 进行项目代码的版本的管理,Markdown 记录学习笔记,包括真实大厂项目的开发标准和设计规范,命名规范,项目代码规范,SEO优化规范
从蓝湖UI设计稿 到 PC端,移动端,多端响应式开发项目开发
- 真机调试,云服务部署上线;
- Linux环境下 的 Nginx 部署,Nginx 性能优化;
- Gzip 压缩,HTTPS 加密协议,域名服务器备案,解析;
- 企业项目域名跳转的终极解决方案,多网站、多系统部署;
- 使用 使用 Git 在线项目部署;
这些内容在《30天挑战学习计划》中每一个细节都有讲到,包含视频+图文教程+项目资料素材等。只为实力宠粉,真正一次掌握企业项目开发必备技能,不走弯路 !
过程中【不涉及】任何费用和利益,非诚勿扰 。
如果你没有添加助理老师微信,可以添加下方微信,说明要参加30天挑战学习计划,来自掘金!老师会邀请你进入学习,并给你发放相关资料。