将普通电子邮件地址解析成两部分

44

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

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

我希望找到最短的代码来实现此功能,不一定要高效。


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


1
email.Split('@')[0] 和 email.Split('@')[1] - Aliostad
请使用Brian Bondy的解决方案。任何使用string.Split的方法在许多情况下都会失败。现在哪里是必要的(而且毫无意义的)正则表达式解决方案? - Jim Mischel
3
你好,@Jim: /hello/ 和 /site.com/ 需要翻译成中文。 - Parris Varney
5个回答

117

使用MailAddress类。

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

这种方法的好处还在于可以解析类似以下情况(以及其他你可能没有预料到的情况):

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

在上述两种情况下:

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

在你的文件顶部与其它using指令一起加入:

using System.Net.Mail;

小提示:MailAddress 在 Windows Store 应用程序中不可用。 - Cœur

15
String[] parts = "hello@example.com".Split(new[]{ '@' });
String username = parts[0]; // "hello"
String domain = parts[1]; // "example.com"

14
因为缺少一个分号?我们是不是对编译错误有些太认真了? - Brad Christie
2
是的,我总是期望在SO上发布的实际代码至少可以编译。否则请说明它是伪代码。 - Mauricio Scheffer

6
string username = email.Split('@')[0];
string domain = email.Split('@')[1];

3
尽管这个例子很好地展示了这个想法,但它树立了一个不好的榜样。调用 Split 两次是低效的,在未来当事物改变时需要更多的维护工作。 - detunized
2
我正在寻找最短的代码来完成这个任务,不一定是高效的。 - hunter
3
通常情况下,这就是为什么我们需要每一到两年升级电脑的原因。 - detunized
@detunized 同意... 我不会这样做,但这是他想要的。 - hunter

2

使用此方法,当未找到域名或用户名时,不会抛出异常,而是返回null值。

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”。 - tokyo0709

1
int i = email.IndexOf('@');
if (i >= 0)
{
    username = email.Substring(0, i);
    domain = email.Substring(i + 1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接