1

你会推荐什么来获得像“IsMailValid”这样的简单结果?-> 真|假?

  • 使用正则表达式是否可以节省
  • 使用 .NET 的 System...Mail.MailAddressParser 和一个简单的 try/catch 会更好吗?

由于速度不是那么相关,我认为使用 MailAddressParser 可以吗?

问候

约翰

4

2 回答 2

1

鉴于您对速度的特别要求不是必需的,我会使用带有 try/catch 的 Mail.MailAddressParser。它可以保证过滤掉 .NET 运行时无法识别为有效电子邮件地址的任何内容,而且它要简单得多。

一个好的正则表达式可能会做同样的事情,但一个糟糕的正则表达式会给你带来误报、误报或两者兼而有之。

如果速度是一个因素,处理异常的性能成本会让我走另一条路,但在这种情况下,根据您的要求,更少的代码,更易读的代码,并且它“正常工作”都平衡了性能因素。

澄清:

我假设您的预期代码如下所示:

try
{
   System.Net.Mail.MailAddress address = new System.Net.Mail.MailAddress(somestring);
}
catch(Exception ex)
{
   // handle invalid email addresses here.
}

我的建议仅适用于这种情况。这是对不使用异常的最佳实践的故意例外,其他方法可以工作,并且建议因为明确声明性能不是一个因素。

于 2011-07-20T21:17:33.233 回答
0

在您预计会定期失败的情况下使用异常是违反 .NET 最佳实践的。原因是例外非常昂贵。

我会在编译模式下使用正则表达式来过滤掉错误的电子邮件地址。

像这样的东西会完美地工作:

Private Function ValidEmail(ByVal Email As String) As Boolean
    If Text.RegularExpressions.Regex.IsMatch(Trim(Email), "^\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}\b$", RegexOptions.IgnoreCase Or RegexOptions.Compiled) = False Then
        Return False
    Else
        Return True
    End If
End Function
于 2011-07-20T21:21:30.310 回答