php - 电子邮件地址验证(点和大写)

标签 php mysql email authentication

如您所知,电子邮件地址中可以使用很多字符。 现在人们在他们的电子邮件地址中拆分一些关键字以提高可读性,例如:

name.surname@gmail.com
x-com.shop.support@stuff.net

但是,点字符 . 在使用 Gmail 时(以及大写)只会提高可读性,不会将其作为电子邮件地址的一部分。因此,我们可以说:

name.surname@gmail.comnamesurname@gmail.com 相同

x-com.shop.support@stuff.netx-comshopsupport@stuff.net 相同


问题

大多数网站都使用数据库驱动的身份验证。假设我注册了一个电子邮件(没有点)namesurname@gmail.com 那么,这样的 MySQL 查询将不起作用,因为字符串不同:

SELECT * FROM users WHERE email = "name.surname@gmail.com";


问题

是否有解决此类问题的解决方法?事实上,不同的电子邮件服务器使用不同的规则。那么用户是否必须始终记住,他们在哪个网站上使用了点或大写字母,甚至那个电子邮件地址仍然是相同的?


更新

想象一下某个服务,您可以使用同一个电子邮件创建大量帐户。 原始电子邮件是 namesurname@gmail.com,别名:

name.surname@gmail.com
n.amesur.name@gmail.com
nam.esurname@gmail.com

您仍然会在同一地址收到电子邮件确认。听起来很奇怪,是吧?

最佳答案

如果您真的想按照您提议的方式解决您的问题,您将不得不将您的电子邮件地址存储为某种规范形式。说出所有小写字母并删除“点”或您想要忽略的任何其他特殊字符。

您可以通过使用触发器 (http://sqlfiddle.com/#!2/81689/1)“自动化”该事物:

create table email(addr char(80), canon char(80) UNIQUE);
CREATE TRIGGER ins_email BEFORE INSERT ON email
FOR EACH ROW
    SET NEW.canon = REPLACE(LOWER(NEW.addr), ".","");

INSERT IGNORE INTO email(addr) VALUES ("Sylvain.Leroux@example.com"),
   ("sylvainleroux@example.com"),
   ("SYLVAINLEROUX@ex.ample.com");

这只会根据规范化表格在表中插入一个行。 请仔细看最后一个例子。域是“ex.ample.com”,它被我的简单触发器规范化为“examplecom”。这可能是不可取的。这只是为了指出正确的规范化可能比 REPLACE(LOWER( ... 复杂一点。此外,您可能需要创建一个重复的 ON UPDATE 这个触发器。但是...


...我不会朝那个方向走得更远,因为:

"capitalization [..] is not taken in account"

这是一个常见的误解:域名(@ 的右边)区分大小写。但是local parts (@ 的左侧) 区分大小写。除了特殊情况 postmaster

大多数 MTA 配置为忽略“本地部分”的大小写敏感性。但这绝对不是必需的。事实上RFC5321 section 2.2明确指出“邮箱的本地部分必须区分大小写。”

关于php - 电子邮件地址验证(点和大写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171062/

相关文章:

php - 外部托管电子邮件并使用 PHP 发送电子邮件

php - Jwt 身份验证错误参数 3 传递给 Lcobucci\JWT\Signer\Hmac::doVerify()

php - 我怎样才能找出一个进程在 Linux 中运行的是哪个 PHP 脚本?

php - 在 wp_Query 的 $args 中执行错误的关系值?

javascript - 在图表之间切换

php - MySQL 和 HTML : Ordering a row based on a specific value

java - Sqoop,Java中将HDFS导出到MySQL

mysql - Django 南 : Combining "alter table"s for better performance?

php - MailGun API 不输出 JSON

email - 自动Shopify分析电子邮件