php - 如何在 PHP 中验证电子邮件地址

标签 php regex email email-validation

我有这个功能来验证电子邮件地址:

function validateEMAIL($EMAIL) {
    $v = "/[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+/";

    return (bool)preg_match($v, $EMAIL);
}

这样可以检查电子邮件地址是否有效吗?

最佳答案

检查电子邮件地址是否格式正确的最简单和最安全的方法是使用 filter_var()功能:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // invalid emailaddress
}

此外,您还可以检查域是否定义了 MX 记录:

if (!checkdnsrr($domain, 'MX')) {
    // domain is not valid
}

但这仍然不能保证邮件存在。找出答案的唯一方法是发送确认邮件。


现在您已经有了简单的答案,如果您想学习,请随时阅读有关电子邮件地址验证的内容,否则只需使用快速答案并继续前进。没有难过的感觉。

尝试使用正则表达式验证电子邮件地址是一项“不可能”的任务。我什至会说您制作的正则表达式毫无用处。有三个关于电子邮件地址的 rfc,编写一个正则表达式来捕获错误的电子邮件地址,同时没有误报,这是凡人无法做到的。查看this list用于 PHP 的 filter_var() 函数使用的正则表达式的测试(失败和成功)。

即使是内置的 PHP 函数、电子邮件客户端或服务器也无法正常工作。在大多数情况下,filter_var 仍然是最佳选择。

如果您想知道 PHP(当前)使用哪种正则表达式模式来验证电子邮件地址,请参阅 the PHP source .

如果您想了解有关电子邮件地址的更多信息,我建议您开始阅读规范,但我必须警告您,无论如何阅读都不是一件容易的事:

关于php - 如何在 PHP 中验证电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833998/

相关文章:

c# - 我想在我的电子邮件中嵌入图片

php - 两个日期之间的MySQL查询作为时间戳

java - 如何从 Android 读取 MYSQL 数据库?

php - 如何识别mysql日志上的学说查询?

php - 使用 PHP 中的复选框更新表中的值

java - 正则表达式 : filter a character in an expression but not inside the quotation mark

javascript - JavaScript 中的正则表达式拒绝 3 个连续字符

python - 需要帮助理解带有正则表达式和 cURL 的 python 片段

PHP - 过滤电子邮件正文,删除回复引号

c# - 如何在 C# 中发送多部分 MIME 消息?