【问题标题】:Parse plain email address into 2 parts将纯电子邮件地址解析为两部分
【发布时间】:2016-09-10 15:32:27
【问题描述】:

如何从以下电子邮件地址获取用户名和域:

string email = "hello@example.com";
//Should parse into:
string username = "hello";
string domain = "example.com";

我正在寻找最短的代码来做到这一点,不一定有效。


场景:我想在我的 ASP.NET MVC 视图中解析它,以便隐藏它。

【问题讨论】:

  • email.Split('@')[0] 和 email.Split('@')[1]
  • 使用 Brian Bondy 的解决方案。在许多情况下,任何使用string.Split 的东西都会失败。现在强制性(而且是完全错误的)正则表达式解决方案在哪里?
  • @Jim: /hello/ 和 /site\.com/

标签: c#


【解决方案1】:

使用MailAddress

MailAddress addr = new MailAddress("hello@site.com");
string username = addr.User;
string domain = addr.Host;

此方法的好处是还可以解析这样的情况(以及您可能没想到的其他情况):

MailAddress addr = new MailAddress("\"Mr. Hello\" <hello@site.com>");
string username = addr.User;
string host = addr.Host;

以上两种情况:

Debug.Assert(username.Equals("hello"));
Debug.Assert(host.Equals("site.com"));

在你的文件顶部加上你的其余 using 指令:

using System.Net.Mail;

【讨论】:

  • 小记:MailAddress 在 Windows Store App 上不可用。
【解决方案2】:
String[] parts = "hello@example.com".Split(new[]{ '@' });
String username = parts[0]; // "hello"
String domain = parts[1]; // "example.com"

【讨论】:

  • 缺少分号?把编译错误看得太认真了,不是吗?
  • 是的,我一直希望在 SO 上发布的实际代码至少是可编译的。否则说它是伪代码。
【解决方案3】:
string username = email.Split('@')[0];
string domain = email.Split('@')[1];

【讨论】:

  • 事件虽然很好地展示了这个想法,但它树立了一个坏榜样。两次调用Split 效率低下,并且在将来发生变化时需要更多维护。
  • “我正在寻找最短的代码来做到这一点,不一定有效。” :)
  • 嗯,这通常是我们必须每隔一两年升级一次计算机的原因。
  • @detunized 同意...我不会这样做,但这就是他想要的
【解决方案4】:

当没有找到域或用户名时,使用它不会给出异常,而是会给出空值,

C#:

string email = "hello@example.com";

string username = email.Split('@').ElementAtOrDefault(0);
string domain = email.Split('@').ElementAtOrDefault(1);

VB:

Dim email as String = "hello@example.com";
Dim username = email.Split("@".ToCharArray()).ElementAtOrDefault(0);
Dim domain = email.Split("@".ToCharArray()).ElementAtOrDefault(1);

【讨论】:

  • 这不会给出空值。如果给定的电子邮件被列为“helloexample.com”,则用户名行将返回“helloexample.com”
【解决方案5】:
int i = email.IndexOf('@');
if (i >= 0)
{
    username = email.Substring(0, i);
    domain = email.Substring(i + 1);
}

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2014-12-23
    • 2011-11-27
    • 1970-01-01
    • 2015-05-02
    • 2013-08-10
    • 2019-04-03
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多