跳到正文
马克工具箱

常用正则表达式大全

整理了开发中最常用的正则表达式:中国大陆手机号、身份证号、固定电话、邮编、车牌号、QQ 号,邮箱、网址、域名、IP、MAC 地址,整数、小数、金额,日期、时间、用户名、强密码、颜色、UUID、版本号等。每条都附有说明和匹配、不匹配的例子,可以一键复制,也可以直接输入内容测试。

在浏览器本地运行,输入的内容和文件都不会上传

  • 邮箱地址

    常见的邮箱格式,允许点、加号和多级域名

    /^[\w.+-]+@[\w-]+(\.[\w-]+)+$/

    ✓ name@example.com a.b+tag@mail.co.uk✗ name@ @example.com a b@example.com

  • 网址(http/https)

    以 http:// 或 https:// 开头、不含空格的网址

    /^https?:\/\/[^\s/$.?#][^\s]*$/i

    ✓ https://example.com/path?q=1 http://localhost:8080✗ ftp://example.com example.com https:// bad

  • 域名

    由字母、数字和连字符组成的多级域名

    /^(?=.{1,253}$)(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,63}$/

    ✓ example.com sub.example.co.uk✗ -bad.com example exa_mple.com

  • 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)$/

    ✓ 192.168.1.1 8.8.8.8 255.255.255.0✗ 256.1.1.1 1.2.3 01.2.3.4

  • MAC 地址

    六组两位十六进制,用冒号或连字符分隔

    /^(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}$/

    ✓ 00:1A:2B:3C:4D:5E 00-1a-2b-3c-4d-5e✗ 001A2B3C4D5E 00:1A:2B:3C:4D

  • 手机号(中国大陆)

    11 位,以 13~19 开头,不含 +86

    /^1[3-9]\d{9}$/

    ✓ 13800138000 19912345678✗ 12345678901 1380013800 +8613800138000

  • 固定电话

    区号加号码,区号和号码之间可以有连字符

    /^0\d{2,3}-?\d{7,8}$/

    ✓ 010-12345678 0755-1234567 02112345678✗ 12345678 010-123

  • 身份证号(18 位)

    校验地区码长度、出生日期格式,末位可以是 X;不校验校验码

    /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/

    ✓ 11010519491231002X 440308199901010012✗ 11010519491331002X 1101051949123100

  • 邮政编码

    6 位数字

    /^\d{6}$/

    ✓ 100000 010000✗ 10000 1000000

  • 车牌号

    普通车牌 7 位、新能源车牌 8 位,不含字母 I 和 O

    /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/

    ✓ 京A12345 粤BD12345 沪A1234学✗ 京12345 京AI2345

  • 纯中文

    只包含常用汉字

    /^[\u4e00-\u9fa5]+$/

    ✓ 中文 正则表达式✗ 中文abc

  • QQ 号

    5~11 位数字,不以 0 开头

    /^[1-9]\d{4,10}$/

    ✓ 10001 123456789✗ 01234 1234

  • 银行卡号

    16~19 位数字;是否有效还需要 Luhn 校验

    /^[1-9]\d{15,18}$/

    ✓ 6222021234567890123 4111111111111111✗ 0222021234567890 622202123456

  • 整数

    可以带负号

    /^-?\d+$/

    ✓ 0 -42 12345✗ 1.5 1e3

  • 正整数

    不以 0 开头

    /^[1-9]\d*$/

    ✓ 1 100✗ 0 01 -1

  • 小数

    可以带负号,小数点前后都要有数字

    /^-?\d+(?:\.\d+)?$/

    ✓ 3.14 -0.5 42✗ .5 1. 1,000

  • 金额

    非负数,最多两位小数

    /^(?:0|[1-9]\d*)(?:\.\d{1,2})?$/

    ✓ 0 99.9 1234.56✗ 01.00 1.234 -1

  • 日期(YYYY-MM-DD)

    月份 01~12、日期 01~31,不检查大小月

    /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/

    ✓ 2026-09-26 1999-12-31✗ 2026-13-01 2026-9-26 26-09-2026

  • 时间(HH:MM[:SS])

    24 小时制,秒可省略

    /^(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/

    ✓ 09:30 23:59:59✗ 24:00 9:30 12:60

  • 用户名

    字母开头,4~16 位字母、数字或下划线

    /^[a-zA-Z][a-zA-Z0-9_]{3,15}$/

    ✓ alice_01 Bob2026✗ 1alice ab bad-name

  • 强密码

    至少 8 位,同时包含大写字母、小写字母、数字和符号

    /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\w\s]).{8,}$/

    ✓ Passw0rd! Aa1@aaaa✗ password Password1 Aa1@

  • 十六进制颜色

    #RGB 或 #RRGGBB

    /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/

    ✓ #fff #0F766E✗ fff #ffff #12345g

  • UUID

    标准格式的 UUID(版本 1~8)

    /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i

    ✓ 123e4567-e89b-42d3-a456-426614174000✗ 123e4567-e89b-42d3-c456-426614174000 123e4567e89b42d3a456426614174000

  • 语义化版本号

    主版本.次版本.修订号,可带预发布和构建信息

    /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-zA-Z-]+(?:\.[\da-zA-Z-]+)*)?(?:\+[\da-zA-Z-]+(?:\.[\da-zA-Z-]+)*)?$/

    ✓ 1.0.0 2.1.3-beta.1+build.5✗ 1.0 01.0.0 v1.0.0

  • HTML 标签对

    查找成对的开始和结束标签,捕获标签名和内容

    /<([a-zA-Z][\w-]*)\b[^>]*>([\s\S]*?)<\/\1>/g

    ✓ <b>bold</b> <a href="#">link</a>✗ <b>unclosed plain text

  • 空行

    配合 m 标志查找空行或只有空白的行,可用于删除空行

    /^\s*$/m

    ✓ ✗ text

正则按 JavaScript 语法书写,Java、Python、Go 等大多数语言也能直接使用(注意反斜杠转义)。格式校验只检查写法,身份证、银行卡是否真实有效还需要校验位或官方渠道验证。

使用步骤

  1. 在搜索框输入要找的格式,或按分类筛选。
  2. 点「复制」拿到正则,在代码里使用时注意反斜杠转义。
  3. 在卡片下方的输入框里输入内容,立即看到是否匹配。

参数说明

语法
按 JavaScript 语法书写,Java、Python、Go、PHP 等语言基本通用;在字符串里使用时反斜杠需要写成两个。
整串匹配
校验类正则都带有 ^ 和 $,要求整个输入符合格式;如果要在长文本里查找,去掉 ^ 和 $ 并加 g 标志。
格式与有效性
正则只检查格式。身份证号、银行卡号是否真实有效,还需要校验位计算或官方渠道核实。

正则是怎么构成的:以 IPv4 为例

IPv4 的正则展示了校验类正则的常见结构。一段数字(octet)写成四个按顺序尝试的分支,每个分支只接受 0–255 中的一部分:

25[0-5]      250–255
2[0-4]\d     200–249
1\d\d        100–199
[1-9]?\d     0–99, with no leading zero

整个正则是 (octet\.){3}octet,前后用 ^ 和 $ 锚定。所以 192.168.1.1 能匹配,而 256.1.1.1、01.2.3.4 和 1.2.3 不能。

格式正确不等于有效

正则只检查写法。日期的正则会接受 2026-02-30,因为它允许每个月都有 30 日;它会拒绝 2026-13-01,因为不存在 13 月。要检验真正的日期,请在正则检查之后,用所用语言的日期库来解析这个值。

常见问题

手机号正则需要经常更新吗?

这里用 1 开头、第二位 3~9 的宽松写法,能覆盖现有和将来新增的号段,一般不需要更新。

为什么邮箱正则不是最严格的版本?

完全符合 RFC 5322 的正则非常复杂且容易误伤。实际项目里用宽松正则做初步检查,再通过发送验证邮件确认。

怎么调试更复杂的正则?

用「正则表达式测试」工具,可以看到每个匹配和分组,还能测试替换。

隐私说明

本工具完全在浏览器中运行,文件和文本都在你的设备上处理,不会上传到我们的服务器。

相关工具