小算云箱小算云箱
← 返回使用指南

常用正则表达式模板大全:校验、提取、清洗(可直接复制)

2026-05-08小算团队开发辅助

整理工程里最常用的正则模板:邮箱/手机号/URL/IPv4/日期时间/日志提取等,并解释每个模式的边界与常见误区;配合小算云箱正则测试工具一键验证分组、替换预览与代码生成。

A. 痛点描述(Problem)#

正则最难的部分往往不是“会不会写”,而是:

  • 你不知道某个场景里“足够好”的模板长什么样
  • 你不知道边界条件(例如国际手机号、URL 的各种合法字符、日期闰年)
  • 你更不知道把模板搬进代码后,是否与当前语言/引擎兼容

这篇文章把工程里最常见的模板按“能直接用”的标准整理出来:每个模板都说明适用范围与坑位,并建议你先在线验证再落地。

工具入口:正则表达式测试
👉 立即使用:正则表达式测试


B. 使用建议(先看这 3 条,少踩 80% 的坑)#

1)区分“校验”与“提取”#

  • 校验:判断整段字符串是否符合格式 → 优先 ^...$ 锚定
  • 提取:从文本中找出若干片段 → 常用 g 全局匹配

同一个模式不一定两用。校验如果不加 ^...$,经常会把“包含合法片段”的字符串误判为合法。

2)不要试图用一个正则覆盖所有世界#

例如邮箱、URL、日期这些格式在标准上非常复杂,工程上通常追求“对我们的输入足够稳”,而不是“对所有 RFC 都完美”。

3)先用工具跑出来“分组与位置”,再写进代码#

在工具里你能看到每条命中的 index/end、分组 $1 $2 ...、命名组,这比肉眼判断准确得多。

👉 立即使用:正则表达式测试


C. 常用模板(可复制)#

说明:下列模板以 JavaScript RegExp 语义为准。跨语言(尤其 Go/Java)请以“工具 → 代码生成”导出对应语言示例为准。

1)邮箱(工程常用版)#

  • 校验(相对宽松、足够工程使用):
    • ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
  • 提取(从文本中找邮箱,配合 g):
    • [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}

常见坑:

  • 域名可能有多级:a.b.c,因此 \.\w+ 不够
  • 用户名里常见 +(邮箱别名),模板应支持

2)手机号(中国大陆常见场景)#

  • 仅校验 11 位手机(不含分隔符):
    • ^1[3-9]\d{9}$
  • 从文本提取手机号(允许空格/短横线分隔):
    • 1[3-9]\d(?:[-\s]?\d){8}

常见坑:

  • 带区号/国际号码不是这个规则,别强行套用
  • 业务里如果允许 +86,建议先做前置清洗再校验

3)URL(HTTP/HTTPS,工程实用版)#

  • 校验(更偏工程可用,不追求 RFC 完整):
    • ^https?:\/\/[^\s/$.?#].[^\s]*$
  • 提取(从文本中找 URL):
    • https?:\/\/[^\s]+

常见坑:

  • URL 合法字符非常多,越“严格”的正则越容易误杀真实 URL
  • 工程上通常“宁可宽松提取,再用 URL 解析器二次校验”

4)IPv4#

  • 严格校验(0-255 每段):
    • ^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$

常见坑:

  • ^\d{1,3}(\.\d{1,3}){3}$ 太宽松,会把 999.999.999.999 当成合法

5)日期(YYYY-MM-DD,含月份/日期范围)#

  • 校验(不处理闰年细节,但会约束 01-12 月与 01-31 日):
    • ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

常见坑:

  • 是否允许 / 分隔、是否允许单数字月日(2026-5-8)需要明确
  • 闰年与每月天数差异,用正则硬做会非常复杂;工程上常用“正则粗校验 + 日期库精校验”

6)时间(HH:mm:ss)#

  • 24 小时制校验:
    • ^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$

7)十六进制(颜色值 / hash 片段)#

  • Hex 颜色(#RGB / #RRGGBB):
    • ^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
  • 32 位 hex(常见 hash):
    • ^[0-9a-fA-F]{32}$

8)日志提取:从一行里抓字段#

示例文本:

  • 2026-05-08 10:23:11 INFO order-service trace_id=abc123 cost=12ms user=42

提取 key=value(简化版):

  • (\w+)=([^\s]+)

配合 g 全局匹配后,你能得到两列分组:

  • $1:key
  • $2:value

如果 value 里可能包含空格(如引号包裹),建议升级为:

  • (\w+)=(?:"([^"]*)"|([^\s]+))

然后用分组判断是 $2 还是 $3 命中。


D. 在工具里怎么验证(推荐流程)#

👉 立即使用:正则表达式测试

  1. 把模板粘贴进“正则表达式”,按需求选择 g/i/m/s/u 等 flags
  2. 把样例文本粘贴到“测试文本”,确认命中数量与命中内容
  3. 看“匹配结果表格”的分组列,确认每个字段是否被正确捕获
  4. 如需清洗,写替换模板并看“替换预览”
  5. 点“代码生成”,把模板变成可运行代码落地到项目

E. 常见问题(FAQ)#

1)要不要追求“一个正则适配全世界”?#

一般不建议。你应该先定义“输入来源与边界”,再写一个对这个边界足够稳的模板。

2)为什么模板在工具里能用,放到代码里不行?#

常见原因是“字符串字面量二次转义”。例如在 JS 字符串里写 \d,你需要 "\\d"。建议直接用“代码生成”导出,避免手写转义出错。


工具推荐#