你会推荐什么来获得像“IsMailValid”这样的简单结果?-> 真|假?
- 使用正则表达式是否可以节省
- 使用 .NET 的 System...Mail.MailAddressParser 和一个简单的 try/catch 会更好吗?
由于速度不是那么相关,我认为使用 MailAddressParser 可以吗?
问候
约翰
你会推荐什么来获得像“IsMailValid”这样的简单结果?-> 真|假?
由于速度不是那么相关,我认为使用 MailAddressParser 可以吗?
问候
约翰
鉴于您对速度的特别要求不是必需的,我会使用带有 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.
}
我的建议仅适用于这种情况。这是对不使用异常的最佳实践的故意例外,其他方法可以工作,并且仅建议因为明确声明性能不是一个因素。
在您预计会定期失败的情况下使用异常是违反 .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