【问题标题】:Email ID accepting more than one time (.com) at the end最后接受多次的电子邮件 ID (.com)
【发布时间】:2012-12-20 12:19:33
【问题描述】:

我在一个网站上工作,在那里我编写了以下正则表达式来验证电子邮件 ID,并在正则表达式验证器中使用了该正则表达式。正则表达式是

\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

它像我预期的那样接受有效的电子邮件 ID。但是当我的 QA 进行像 ak@gmail.com.com.com.com 这样的负面输入测试时,它允许并说电子邮件 ID 是有效的。我到处搜索,几乎在各个方面都尝试过解决这个问题。任何人都可以帮我限制像上面这样的邮件ID。实际上,像ak@gmail.co.in 这样的电子邮件ID 可以被接受,但是当. 之后的最后一个字符串重复时,问题就来了。请帮忙。我正在使用 dot net 2005。

【问题讨论】:

  • ak@gmail.com.com.com.com 是格式正确的电子邮件地址。如果要进行适当的检查,则需要从地址中提取主机(在本例中为 gmail.com.com.com.com)并为其请求 DNS MX 记录。如果不存在,则地址无效。
  • 不,@AleksG 我试图在 url 中输入 gmail.com.com.com.com 并显示 Oops! Google Chrome 无法为我找到 gmail.com.com.com.com。
  • @SaiKalyanAkshinthala 这是因为该域未注册,但从语法上讲,这是一个有效域。通过在浏览器中使用gmail.com.com.com.com.com,您确实检查了它没有 DNS A 记录。这不会使@AlexsG 指出地址格式正确的观点无效。

标签: asp.net regex validation email


【解决方案1】:

ak@gmail.com.com.com.com 在语法上是正确的。但是,gmail.com.com.com.com 没有 MX 记录,这使其无法访问,但并非无效。

如果你想检查这个,你应该首先检查语法(使用你拥有的正则表达式),然后查找主机名的 MX 记录。

我还想指出,您使用的正则表达式真的很糟糕,并且会使很多有效的邮件地址失效。

【讨论】:

    【解决方案2】:

    RFC822 中指定的有效电子邮件格式确实很复杂,正则表达式可能不是the best tool 来解析和验证它们的。如果你仍然想使用正则表达式,你应该考虑检查Validate email address in Javascript?parse email with regex in c#的答案。

    TL; DR:不要使用正则表达式来验证电子邮件地址。而是使用真正的 RFC822 解析器,并检查域中是否存在 DNS MX 记录,并可能尝试使用可用于验证电子邮件已收到且用户拥有该地址的链接向该地址发送电子邮件.

    【讨论】:

    • @Sylvain,我已经告诉我正在使用 .Net 2005,并且我已经检查了您提供的链接中的问题。提供的答案,并没有为我添加任何线索。
    • @SaiKalyanAkshinthala 你的问题被标记为javascript。如果您不希望响应将您指向 javascript,请不要使用该标签。
    【解决方案3】:

    添加以下表达式以检查电子邮件

     ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"  
    

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多