# Email 地址验证正则表达式
## 测试报告
基于正则表达式:
```
/\A[a-zA-Z0-9+]+([._-][a-zA-Z0-9+]+)*@[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}\z/
```
### 1. ✅ 允许通过 (Allowed)
| 测试用例 | 类型 | 代码行为 | 原因分析 |
| :--- | :--- | :--- | :--- |
| `
[email protected]` | 标准格式 | **允许** | 基础结构完全匹配。 |
| `
[email protected]` | 用户名含下划线 | **允许** | `_` 被视为合法字符。 |
| `
[email protected]` | 用户名含加号 | **允许** | `+` 被视为合法字符,支持别名。 |
| `
[email protected]` | 用户名含点 | **允许** | 点号前后都有字符。 |
| `
[email protected]` | 纯数字用户名 | **允许** | `[a-zA-Z0-9+]+` 涵盖纯数字。 |
| `
[email protected]` | 混合符号 | **允许** | `-` 和 `.` 位置正确且不连续。 |
| `
[email protected]` | 极短用户名 | **允许** | 用户名长度 ≥ 1。 |
| `
[email protected]` | 域名含连字符 | **允许** | 域名中间允许 `-`。 |
| `
[email protected]` | 多级域名 | **允许** | 支持无限级子域名结构。 |
| `
[email protected]` | 长 TLD | **允许** | TLD 允许长字符串。 |
---
### 2. ❌ 拒绝:连续符号与位置错误 (Disallowed - Symbols)
| 测试用例 | 类型 | 代码行为 | 原因分析 |
| :--- | :--- | :--- | :--- |
| `
[email protected]` | 连续点 | **拒绝** | 用户名中 `..` 连续。 |
| `
[email protected]` | 连续横杠 | **拒绝** | 用户名中 `--` 连续。 |
| `
[email protected]` | 连续下划线 | **拒绝** | 用户名中 `__` 连续。 |
| `
[email protected]` | 域名连续符号 | **拒绝** | 域名中 `.-` 连续。 |
| `
[email protected]` | 域名连续点 | **拒绝** | 域名中 `..` 连续。 |
| `
[email protected]` | 符号开头 | **拒绝** | 用户名不能以 `.` 开头。 |
| `
[email protected]` | 符号结尾 | **拒绝** | 用户名不能以 `.` 结尾。 |
| `
[email protected]` | 域名符号开头 | **拒绝** | 域名段不能以 `-` 开头。 |
| `
[email protected]` | 域名符号结尾 | **拒绝** | 域名段不能以 `-` 结尾。 |
---
### 3. ❌ 拒绝:域名非法字符 (Disallowed - Domain Chars)
关于域名部分的规则:只能是字母、数字和连字符(-)。
| 测试用例 | 类型 | 代码行为 | 原因分析 |
| :--- | :--- | :--- | :--- |
| `123@email_me.com` | 域名含下划线 | **拒绝** | 标准域名规范(DNS)不允许下划线。 |
| `
[email protected]` | TLD 过短 | **拒绝** | 顶级域名至少 2 个字母。 |
| `
[email protected]` | 数字 TLD | **拒绝** | 顶级域名必须是纯字母。 |
| `
[email protected].` | 结尾有点 | **拒绝** | 域名不能以点结束。 |
---
### 4. ❌ 拒绝:空格与格式 (Disallowed - Spaces & Format)
| 测试用例 | 类型 | 代码行为 | 原因分析 |
| :--- | :--- | :--- | :--- |
| `abc <
[email protected]>` | 带名称格式 | **拒绝** | 正则使用 `\A` 和 `\z` 锚定了整个字符串,检测的是"纯粹的邮箱地址",含空格和尖括号会直接匹配失败。 |
| `name
[email protected]` | 用户名含空格 | **拒绝** | 空格 `\s`不在允许的字符集 `[a-zA-Z0-9+._-]` 中。 |
| `
[email protected]` | 开头有空格 | **拒绝** | `\A` 紧接着要求字母/数字,空格会导致不匹配(除非先 trim)。 |
| `
[email protected] ` | 结尾有空格 | **拒绝** | `\z` 要求紧接域名结束,空格会导致不匹配。 |
| `name@ email.com` | @后有空格 | **拒绝** | 域名部分不允许空格。 |