将普通电子邮件地址分为两部分

时间:2010-12-14 19:20:11

标签: c#

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

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

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


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

5 个答案:

答案 0 :(得分:88)

使用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;

答案 1 :(得分:12)

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

使用此功能,如果没有找到域或用户名,它将不会给出异常,而是为此提供空值,

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);