isEmail
检查字符串是否为符合基本格式的电子邮件地址,提供简化版和严格版两种验证模式。
示例
基本用法(简化版)
typescript
import { isEmail } from '@esdora/kit'
// 常见的有效格式
isEmail('user@example.com') // => true
isEmail('user.name@example.co.uk') // => true
isEmail('user_name+tag123@example.io') // => true
// 无效格式
isEmail('invalid-email') // => false
isEmail('@example.com') // => false
isEmail('user@') // => false国际化邮箱(严格版)
typescript
import { isEmailStrict } from '@esdora/kit'
// 支持中文及国际化字符
isEmailStrict('中文@example.com') // => true
// 支持带引号的本地部分
isEmailStrict('"quoted-local-part"@example.com') // => true
// 标准格式也支持
isEmailStrict('user@example.com') // => true简化版与严格版对比
typescript
import { isEmail, isEmailStrict } from '@esdora/kit'
const internationalEmail = '中文@example.com'
isEmail(internationalEmail) // => false (简化版不支持)
isEmailStrict(internationalEmail) // => true (严格版支持)
const quotedEmail = '"quoted-local-part"@example.com'
isEmail(quotedEmail) // => false (简化版不支持)
isEmailStrict(quotedEmail) // => true (严格版支持)签名与说明
类型签名
typescript
function isEmail(email: string): boolean
function isEmailStrict(email: string): boolean参数说明
| 参数 | 类型 | 描述 | 必需 |
|---|---|---|---|
string | 要验证的电子邮件字符串 | 是 |
返回值
- 类型:
boolean - 说明:
isEmail: 如果字符串是基本格式的电子邮件地址则返回true,否则返回falseisEmailStrict: 如果字符串符合 RFC 5322 规范的电子邮件地址则返回true,否则返回false
- 特殊情况: 空字符串、纯空格、缺少 @ 符号等都返回
false
注意事项与边界情况
输入边界
简化版
isEmail:- 仅支持标准 ASCII 字符集邮箱(a-z, A-Z, 0-9, ., %, +, -, _)
- 不支持中文字符或其他 Unicode 字符
- 不支持引号包裹的本地部分(如
"quoted"@example.com) - 支持子域名(如
user@sub.domain.com) - 支持国际化域名编码(如
user@xn--exmple-cua.com)
严格版
isEmailStrict:- 支持所有
isEmail支持的格式 - 额外支持国际化域名(IDN)和中文字符
- 支持引号包裹的本地部分
- 更接近 RFC 5322 邮件地址规范
- 支持所有
共同边界:
- 空字符串返回
false - 纯空格返回
false - 缺少 @ 符号返回
false - 本地部分为空(如
@example.com)返回false - 域名部分为空(如
user@)返回false
- 空字符串返回
错误处理
- 异常类型: 无,函数不会抛出异常
- 处理建议: 无需 try-catch 包裹,所有输入都会被安全处理
性能考虑
时间复杂度:
isEmail: O(n) - 简化正则表达式,性能较高isEmailStrict: O(n) - 复杂正则表达式,性能略低但验证更准确
空间复杂度: O(1) - 仅使用正则匹配,无额外内存分配
优化建议:
- 对于标准 ASCII 邮箱验证场景,优先使用
isEmail(性能更好) - 需要支持国际化邮箱时,使用
isEmailStrict - 两种验证器的正则表达式都已预编译,适合高频调用
- 对于表单验证等场景,建议配合防抖使用以减少验证频率
- 对于标准 ASCII 邮箱验证场景,优先使用
兼容性
- 环境要求: ES5+
- 浏览器: 所有现代浏览器和 IE9+
- Node.js: 所有版本
- 已知限制:
- 不验证邮箱地址是否真实存在
- 不验证域名 DNS 记录
- 不验证邮箱长度限制(本地部分最大 64 字符,域名最大 255 字符)