如何使用正则表达式 (Regex) 验证电子邮件地址。 示例 HTML5、PHP、C#、Python 和 Java 代码。
现在几乎每种编程语言都支持正则表达式。 虽然一些开发人员不喜欢它们,但它们确实是一种最佳实践,因为它们通常以极快的速度执行验证等功能,并且使用较少的服务器资源。 电子邮件地址就是一个很好的例子……可以很容易地检查它们以确保它们的格式正确。
请记住,验证不是 验证. 验证只是意味着传递的数据遵循正确构造的标准格式。 关于电子邮件地址的一些有趣的事情在验证时可能会被遗漏。
什么是电子邮件地址?
电子邮件地址,由 Internet 消息格式 (RFC 5322), 由两个主要部分组成:本地部分和域部分。 本地部分先于 @
符号和域部分在后面。 以下是电子邮件地址的示例: example@example.com
,其中 example
是本地部分,并且 example.com
是域部分。
- 本地品牌 – 电子邮件地址的本地部分可能包含字母数字字符、句点、连字符、加号和下划线的组合。 它通常用于标识服务器上的特定邮箱或帐户。
- 域名 – 电子邮件地址的域部分由域名及其顶级域组成(TLD). 域名是一串字符,用于标识托管电子邮件帐户的服务器。 TLD 指定负责域名的实体类型,例如国家代码(例如
.uk
) 或通用顶级域(例如.com
,.org
).
虽然这是电子邮件地址的基本结构,但构成有效电子邮件地址的规则很复杂。
电子邮件地址可以有多长?
我今天必须做一些挖掘才能找到它,但是您知道电子邮件地址的有效长度是多少吗? 它实际上被分成几部分…… Local@Domain.com.
- 本地可以是 1 到 64 个字符。
- 域可以是1到255个字符。
这意味着——从技术上讲——这可能是一个有效的电子邮件地址:
loremaipsumadolorasitaametbaconsectetueraadipiscin
gaelitanullamc@loremaipsumadolorasitaametbaconsect
etueraadipiscingaelitcaSedaidametusautanisiavehicu
laaluctuscaPellentesqueatinciduntbadiamaidacondimn
tumarutrumbaturpisamassaaconsectetueraarcubaeuatin
ciduntaliberoaaugueavestibulumaeratcaPhasellusatin
ciduntaturpisaduis.com
试着把它贴在名片上! 具有讽刺意味的是,大多数电子邮件地址字段在网络上被限制为 100 个字符……这在技术上是不正确的。 用于验证电子邮件地址的其他一些正则表达式也会查找 3 位数的顶级域,例如 .com; 但是,长度没有限制 顶级域名 (例如。 Martech Zone 有 4 位数字 – .zone)。
常用表达
正则表达式 由于其程序化结构,是测试电子邮件地址的完美方法。 正则表达式广泛用于编程语言和文本编辑器中,并且经常集成到文本处理库或框架中。 它们受到许多编程语言的支持,包括 Python、Java、C# 和 JavaScript 等。
电子邮件地址标准化远比您意识到的复杂。 当写入标准时,这是电子邮件地址的真正正则表达式,归功于 正则表达式:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
此正则表达式模式匹配电子邮件地址的基本格式,包括字母数字字符、句点、连字符、加号和用户名中的下划线,后跟 @
符号,后跟域名。 重要的是要注意,此模式只会检查电子邮件地址的格式,而不是实际的 存在 的电子邮件地址。
HTML5 包括电子邮件结构验证
根据标准确保电子邮件有效的最简单方法是使用 HTML5 电子邮件输入字段:
<input type='email' name='email' placeholder='name@domain.com' />
但是,有时您的 Web 应用程序仍希望在浏览器中输入和提交到服务器时验证电子邮件地址。
PHP中正确电子邮件地址的正则表达式
很少有人意识到这一点,但 PHP 现在已经将 RFC 标准内置到它的 过滤器验证功能.
if(filter_var("name@domain.com", FILTER_VALIDATE_EMAIL)) {
// Valid
}
else {
// Not Valid
}
在 C# 中获取正确电子邮件地址的正则表达式
这是 C# 中电子邮件地址的基本验证
using System;
using System.Text.RegularExpressions;
public class EmailValidator
{
public static bool IsValidEmail(string email)
{
string pattern = @"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$";
return Regex.IsMatch(email, pattern);
}
}
这种方法的实际使用:
string email = "example@example.com";
if (EmailValidator.IsValidEmail(email))
{
Console.WriteLine(email + " is a valid email address.");
}
else
{
Console.WriteLine(email + " is not a valid email address.");
}
在 Java 中获取正确电子邮件地址的正则表达式
这是 Java 中电子邮件地址的基本验证
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
private static final Pattern VALID_EMAIL_ADDRESS_REGEX =
Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);
public static boolean isValidEmail(String email) {
Matcher matcher = VALID_EMAIL_ADDRESS_REGEX .matcher(email);
return matcher.find();
}
}
这种方法的实际使用:
String email = "example@example.com";
if (EmailValidator.isValidEmail(email)) {
System.out.println(email + " is a valid email address.");
} else {
System.out.println(email + " is not a valid email address.");
}
在 Python 中获取正确电子邮件地址的正则表达式
这是 Python 中电子邮件地址的基本验证:
import re
def is_valid_email(email):
pattern = re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
return True if pattern.match(email) else False
这种方法的实际使用:
email = "example@example.com"
if is_valid_email(email):
print(f"{email} is a valid email address.")
else:
print(f"{email} is not a valid email address.")
JavaScript 中正确电子邮件地址的正则表达式
您不必有一个过于复杂的标准来检查电子邮件地址结构。 这是使用 JavaScript 的简单方法。
function validateEmail(email)
{
var re = /\\S+@\\S+/;
return re.test(email);
}
当然,这不符合 RFC 标准,因此您可能希望验证数据的每个部分以确保其有效。 这个正则表达式将符合大约 99.9% 的电子邮件地址。 它并不完全符合标准,但它对几乎任何项目都很有用。
function validateEmail(email)
{
var re = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/;
return re.test(email);
}
其中一些例子归功于 HTML.form.guide.