【发布时间】:2013-08-27 11:14:30
【问题描述】:
我认为以前没有人问过这个问题......我当然找不到有这个要求的东西。
背景
有一个 API 可以返回人员的 ID。一般来说,ID 应该被视为区分大小写......但如果 ID 实际上是他们的电子邮件地址......并且您正在与此 API 的不太出色的实现交谈,该 API 返回其电子邮件地址的混合大小写版本,有很多乐趣......
所以您正在与一种实现对话...它会返回 URL,例如 ID,例如
http://foo.bar.com/blahblahblah
接下来您可能正在与另一个实现对话...它会返回一些不明显的 ID,例如
as€jlhdésdj678hjghas7t7qhjdhg£
您可能正在与一个不错的实现交谈,它会为您返回一个不错的小写电子邮件地址:
bob.mcspam@acme.org
或者您可能正在与返回完全相同 ID 的不太出色的实现交谈
bob.mcspam@ACME.org
RFC 2821 规定只有邮箱区分大小写,但利用区分大小写会导致大量互操作问题...
我想要做的是识别作为电子邮件的字符串并强制域为小写。识别类似字符串的 URI 更容易,因为方案是 http 或 https,我只需要将域名小写,这样更容易解析。
问题
如果给定一个由外部服务提供的字符串,我是否可以使用一个测试来确定该字符串是否是电子邮件地址,以便我可以强制域名为小写?
遗漏一小部分电子邮件地址而不使域名小写是可以接受的。 (允许假阴性)
如果字符串的一部分不是电子邮件地址的域部分,则将其强制为小写是不可接受的。 (不允许误报)
更新
请注意,此问题与 this 和 this 略有不同,因为在这两个问题的上下文中,您已经知道字符串应该是电子邮件地址。
在这个问题的上下文中,我们不知道字符串是电子邮件地址还是其他东西......这使得这个问题与众不同
【问题讨论】:
-
除了检查域是否存在并且在其 DNS 条目中有电子邮件服务器之外,为什么不能使用正则表达式来检查语法上合法的电子邮件地址?很多飞来飞去的人。
-
Verify email in Java的可能重复
-
@radai 好吧,我不想在评估此代码的代码路径上调用 DNS 查询,因为这会引入问题...特别是运行此代码的服务器可能不是能够验证返回的 ID 中的域名。所以检查 DNS 条目已经结束了
-
dns 验证是一个额外的步骤,但除了正则表达式之外,我真的看不到任何其他方法