邮箱正则:可直接复制、真正好用的写法
三个可直接复制的邮箱正则(简单、实用和严格),各自适合什么场景,以及会把真实地址拒之门外的常见错误。

· 阅读约 3 分钟 · 更新于
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
抓住
- ana@site.com
- x+t@site.io
- jo@mail.co.uk
放过
- ana@example
- @site.com
- a@@b.io
01可直接复制的邮箱正则
| 正则 | 适用场景 |
|---|---|
^\S+@\S+$ |
简单:快速的基本检查,比如过滤日志或搜索框。 |
^[^\s@]+@[^\s@]+\.[^\s@]+$ |
实用(我们推荐):用于注册和联系表单,所有真实地址都能通过,常见的输入错误则通不过。 |
^[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])?)*$ |
严格:你需要接受的内容与浏览器 type="email" 字段完全一致。 |
在沙盒中用你自己的地址试试其中任何一个,或者用“格式校验”练习包练一练。本文其余部分会解释为什么实用版是正确的默认选择。
搜索“email regex”,你会找到各种长度的正则,从十个字符到几千个字符不等。有人试图把完整的电子邮件标准写进一个正则表达式,结果出了名地难以读懂。
好消息是:这些你都用不着。下面会介绍我们推荐的正则、为什么更严格的正则带来的麻烦比它防住的还多,以及应该怎么做。每个示例都可以实时编辑,修改正则看看有什么变化。
02为什么不存在“完美”的邮箱正则
邮箱地址格式允许的内容远比大多数人想象的多。下面这些都是合法的:
x+newsletter@site.io(加号标签,用于过滤邮件)j.doe@mail.co.uk(子域名,加上两段式的国家后缀)ana@studio.photography(很长的顶级域名)josé@exemplo.com.br(非英文字母,支持国际化地址的邮件服务器可以处理)
而且正则无法告诉你一个地址是否存在。ana@example.com 格式完美,却仍然可能被退信。唯一真正的检查方式,是发一封邮件,请对方点击里面的链接。
所以正则的任务比看起来要小:在发出那封邮件之前,拦住明显的输入错误。
03我们推荐的正则
/^[^\s@]+@[^\s@]+\.[^\s@]+$/应当匹配5/5
- ana@example.com
- j.doe@mail.co.uk
- x+tag@site.io
- ana@studio.photography
- josé@exemplo.com.br
不应匹配4/4
- ana@example
- ana@@example.com
- ana @example.com
- @example.com
分成四部分来读:
^[^\s@]+一个或多个既不是空白也不是@的字符@恰好一个 @ 符号[^\s@]+\.域名,然后是一个字面上的点[^\s@]+$域名的其余部分,一直到结尾
它简短、易读,而且不会拒绝任何拥有真实地址的人。
04错误 1:忘记锚点
没有 ^ 和 $,正则只需要在文本某处找到一段像邮箱的内容就行:
05错误 2:过于严格
网上最常见的邮箱正则就像下面这个。它看起来很严谨,却把真实用户挡在了门外:
/^[\w.]+@\w+\.[a-z]{2,4}$/应当匹配1/1
- ana@example.com
不应匹配3/3
- j.doe@mail.co.uk
- x+tag@site.io
- ana@studio.photography
它同时在三个地方出错:
- 点前面的
\w+只允许一段域名,所以mail.co.uk无法通过。 [\w.]里没有+,所以带加号标签的地址无法通过。[a-z]{2,4}假设顶级域名都很短。实际上有几百个更长的:.photography、.software、.museum。
即使是更严谨的版本 ^[\w.+-]+@[\w-]+(\.[\w-]+)+$,仍然会拒绝 josé@exemplo.com.br,因为在大多数引擎中 \w 只覆盖英文字母。每拒绝一个真实地址,就少一个注册用户。而漏过去的输入错误,反正也会被确认邮件发现。
06浏览器用的是什么
HTML 的 <input type="email"> 用自己的正则检查地址,这个正则发布在 HTML 标准中:
/^[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])?)*$/如果你在表单上使用 type="email",浏览器已经替你做了这项检查。对前端来说,这通常就够了。
07正则高尔夫版本
校验和高尔夫的目标不同。校验器必须对任何输入都安全。高尔夫棋盘只需要区分这些单词,所以你可以只看最小的差异。
下面每个怪物都在 @ 前面紧挨着一个字母,并且在它后面某处有一个点。每个无辜者都违反了其中一条规则:
抓住看起来像邮箱的字符串,放过格式有误的。
目标 · 抓住 0/4
- ana@site.com目标
- bo@mail.io目标
- x.y@z.org目标
- k@q.dev目标
无辜词 · 误抓 0
- ana@site无辜
- @mail.io无辜
- bo@@z.org无辜
- site.com无辜
- a.b@c无辜
输入正则——棋盘会实时更新。