1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 常见的正则表达式 1. 数字:^[ 0 - 9 ] * $ 2. n位的数字:^\d{n}$ 3. 至少n位的数字:^\d{n,}$ 4. m - n位的数字:^\d{m,n}$ 5. 零和非零开头的数字:^( 0 |[ 1 - 9 ][ 0 - 9 ] * )$ 6. 非零开头的最多带两位小数的数字:^([ 1 - 9 ][ 0 - 9 ] * ) + (.[ 0 - 9 ]{ 1 , 2 })?$ 7. 带 1 - 2 位小数的正数或负数:^(\ - )?\d + (\.\d{ 1 , 2 })?$ 8. 正数、负数、和小数:^(\ - |\ + )?\d + (\.\d + )?$ 9. 有两位小数的正实数:^[ 0 - 9 ] + (.[ 0 - 9 ]{ 2 })?$ 10. 有 1 ~ 3 位小数的正实数:^[ 0 - 9 ] + (.[ 0 - 9 ]{ 1 , 3 })?$ 11. 非零的正整数:^[ 1 - 9 ]\d * $ 或 ^([ 1 - 9 ][ 0 - 9 ] * ){ 1 , 3 }$ 或 ^\ + ?[ 1 - 9 ][ 0 - 9 ] * $ 12. 非零的负整数:^\ - [ 1 - 9 ][] 0 - 9 " * $ 或 ^ - [ 1 - 9 ]\d * $ 13. 非负整数:^\d + $ 或 ^[ 1 - 9 ]\d * | 0 $ 14. 非正整数:^ - [ 1 - 9 ]\d * | 0 $ 或 ^(( - \d + )|( 0 + ))$ 15. 非负浮点数:^\d + (\.\d + )?$ 或 ^[ 1 - 9 ]\d * \.\d * | 0 \.\d * [ 1 - 9 ]\d * | 0 ?\. 0 + | 0 $ 16. 非正浮点数:^(( - \d + (\.\d + )?)|( 0 + (\. 0 + )?))$ 或 ^( - ([ 1 - 9 ]\d * \.\d * | 0 \.\d * [ 1 - 9 ]\d * ))| 0 ?\. 0 + | 0 $ 17. 正浮点数:^[ 1 - 9 ]\d * \.\d * | 0 \.\d * [ 1 - 9 ]\d * $ 或 ^(([ 0 - 9 ] + \.[ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * )|([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * \.[ 0 - 9 ] + )|([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * ))$ 18. 负浮点数:^ - ([ 1 - 9 ]\d * \.\d * | 0 \.\d * [ 1 - 9 ]\d * )$ 或 ^( - (([ 0 - 9 ] + \.[ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * )|([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * \.[ 0 - 9 ] + )|([ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * )))$ 19. 浮点数:^( - ?\d + )(\.\d + )?$ 或 ^ - ?([ 1 - 9 ]\d * \.\d * | 0 \.\d * [ 1 - 9 ]\d * | 0 ?\. 0 + | 0 )$ 2. 校验字符的表达式 1. 汉字:^[\u4e00 - \u9fa5]{ 0 ,}$ 2. 英文和数字:^[A - Za - z0 - 9 ] + $ 或 ^[A - Za - z0 - 9 ]{ 4 , 40 }$ 3. 长度为 3 - 20 的所有字符:^.{ 3 , 20 }$ 4. 由 26 个英文字母组成的字符串:^[A - Za - z] + $ 5. 由 26 个大写英文字母组成的字符串:^[A - Z] + $ 6. 由 26 个小写英文字母组成的字符串:^[a - z] + $ 7. 由数字和 26 个英文字母组成的字符串:^[A - Za - z0 - 9 ] + $ 8. 由数字、 26 个英文字母或者下划线组成的字符串:^\w + $ 或 ^\w{ 3 , 20 }$ 9. 中文、英文、数字包括下划线:^[\u4E00 - \u9FA5A - Za - z0 - 9_ ] + $ 10. 中文、英文、数字但不包括下划线等符号:^[\u4E00 - \u9FA5A - Za - z0 - 9 ] + $ 或 ^[\u4E00 - \u9FA5A - Za - z0 - 9 ]{ 2 , 20 }$ 11. 可以输入含有^ % & ',;=?$\"等字符:[^%&' ,; = ?$\x22] + 12. 禁止输入含有~的字符:[^~\x22] + 3. 特殊需求表达式 1. Email地址:^\w + ([ - + .]\w + ) * @\w + ([ - .]\w + ) * \.\w + ([ - .]\w + ) * $ 2. 域名:[a - zA - Z0 - 9 ][ - a - zA - Z0 - 9 ]{ 0 , 62 }( / .[a - zA - Z0 - 9 ][ - a - zA - Z0 - 9 ]{ 0 , 62 }) + / .? 3. InternetURL:[a - zA - z] + : / / [^\s] * 或 ^http: / / ([\w - ] + \.) + [\w - ] + ( / [\w - . / ? % & = ] * )?$ 4. 手机号码(可根据目前国内收集号扩展前两位开头号码):^( 13 [ 0 - 9 ]| 14 [ 5 | 7 ]| 15 [ 0 | 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 ]| 18 [ 0 | 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 ])\d{ 8 }$ 5. 电话号码( "XXX-XXXXXXX" 、 "XXXX-XXXXXXXX" 、 "XXX-XXXXXXX" 、 "XXX-XXXXXXXX" 、 "XXXXXXX" 和"XXXXXXXX):^(\(\d{ 3 , 4 } - )|\d{ 3.4 } - )?\d{ 7 , 8 }$ 6. 国内电话号码( 0511 - 4405222 、 021 - 87888822 ):\d{ 3 } - \d{ 8 }|\d{ 4 } - \d{ 7 } 7.15 位身份证号:^[ 1 - 9 ]\d{ 5 }\d{ 2 }(( 0 [ 1 - 9 ])|( 10 | 11 | 12 ))(([ 0 - 2 ][ 1 - 9 ])| 10 | 20 | 30 | 31 )\d{ 2 }$ 8.18 位身份证号:^[ 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 ]$ 9. 帐号是否合法(字母开头,允许 5 - 16 字节,允许字母数字下划线):^[a - zA - Z][a - zA - Z0 - 9_ ]{ 4 , 15 }$ 10. 密码(以字母开头,长度在 6 ~ 18 之间,只能包含字母、数字和下划线):^[a - zA - Z]\w{ 5 , 17 }$ 11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8 - 10 之间):^(? = . * \d)(? = . * [a - z])(? = . * [A - Z]).{ 8 , 10 }$ 12. 日期格式:^\d{ 4 } - \d{ 1 , 2 } - \d{ 1 , 2 } 13. 一年的 12 个月( 01 ~ 09 和 1 ~ 12 ):^( 0 ?[ 1 - 9 ]| 1 [ 0 - 2 ])$ 14. 一个月的 31 天( 01 ~ 09 和 1 ~ 31 ):^(( 0 ?[ 1 - 9 ])|(( 1 | 2 )[ 0 - 9 ])| 30 | 31 )$ 15. 钱的输入格式: ( 1 )有四种钱的表示形式我们可以接受: "10000.00" 和 "10,000.00" , 和没有 "分" 的 "10000" 和 "10,000" :^[ 1 - 9 ][ 0 - 9 ] * $ ( 2 )这表示任意一个不以 0 开头的数字,但是,这也意味着一个字符 "0" 不通过,所以我们采用下面的形式:^( 0 |[ 1 - 9 ][ 0 - 9 ] * )$ ( 3 )一个 0 或者一个不以 0 开头的数字.我们还可以允许开头有一个负号:^( 0 | - ?[ 1 - 9 ][ 0 - 9 ] * )$ ( 4 )这表示一个 0 或者一个可能为负的开头不为 0 的数字.让用户以 0 开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[ 0 - 9 ] + (.[ 0 - 9 ] + )?$ ( 5 )必须说明的是,小数点后面至少应该有 1 位数,所以 "10." 是不通过的,但是 "10" 和 "10.2" 是通过的:^[ 0 - 9 ] + (.[ 0 - 9 ]{ 2 })?$ ( 6 )这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[ 0 - 9 ] + (.[ 0 - 9 ]{ 1 , 2 })?$ ( 7 )这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[ 0 - 9 ]{ 1 , 3 }(,[ 0 - 9 ]{ 3 }) * (.[ 0 - 9 ]{ 1 , 2 })?$ ( 8 ) 1 到 3 个数字,后面跟着任意个 逗号 + 3 个数字,逗号成为可选,而不是必须:^([ 0 - 9 ] + |[ 0 - 9 ]{ 1 , 3 }(,[ 0 - 9 ]{ 3 }) * )(.[ 0 - 9 ]{ 1 , 2 })?$ 备注:这就是最终结果了,别忘了 "+" 可以用 "*" 替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里 16. xml文件:^([a - zA - Z] + - ?) + [a - zA - Z0 - 9 ] + \\.[x|X][m|M][l|L]$ 17. 中文字符的正则表达式:[\u4e00 - \u9fa5] 18. 双字节字符:[^\x00 - \xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计 2 ,ASCII字符计 1 )) 19. 空白行的正则表达式:\n\s * \r (可以用来删除空白行) 20. HTML标记的正则表达式:<(\S * ?)[^>] * >. * ?< / \ 1 >|<. * ? / > (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力) 21. 首尾空白字符的正则表达式:^\s * |\s * $或(^\s * )|(\s * $) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式) 22. 腾讯QQ号:[ 1 - 9 ][ 0 - 9 ]{ 4 ,} (腾讯QQ号从 10000 开始) 23. 中国邮政编码:[ 1 - 9 ]\d{ 5 }(?!\d) (中国邮政编码为 6 位数字) 24. IP地址:\d + \.\d + \.\d + \.\d + (提取IP地址时有用) 25. IP地址:((?:(?: 25 [ 0 - 5 ]| 2 [ 0 - 4 ]\\d|[ 01 ]?\\d?\\d)\\.){ 3 }(?: 25 [ 0 - 5 ]| 2 [ 0 - 4 ]\\d|[ 01 ]?\\d?\\d)) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 模式 描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾。 . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 [...] 用来表示一组字符,单独列出:[amk] 匹配 'a' , 'm' 或 'k' [^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 re * 匹配 0 个或多个的表达式。 re + 匹配 1 个或多个的表达式。 re? 匹配 0 个或 1 个由前面的正则表达式定义的片段,非贪婪方式 re{ n} re{ n,} 精确匹配n个前面表达式。 re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 a| b 匹配a或b (re) G匹配括号内的表达式,也表示一个组 (?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 (? - imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 (?: re) 类似 (...), 但是不表示一个组 (?imx: re) 在括号中使用i, m, 或 x 可选标志 (? - imx: re) 在括号中不使用i, m, 或 x 可选标志 (? #...) 注释. (? = re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 (?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 (?> re) 匹配的独立模式,省去回溯。 \w 匹配字母数字 \W 匹配非字母数字 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [ 0 - 9 ]. \D 匹配任意非数字 \A 匹配字符串开始 \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c \z 匹配字符串结束 \G 匹配最后匹配完成的位置。 \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配 "never" 中的 'er' ,但不能匹配 "verb" 中的 'er' 。 \B 匹配非单词边界。 'er\B' 能匹配 "verb" 中的 'er' ,但不能匹配 "never" 中的 'er' 。 \n, \t, 等. 匹配一个换行符。匹配一个制表符。等 \ 1. ..\ 9 匹配第n个分组的子表达式。 \ 10 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架