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

Sha*_*ean 31 c#

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

string email = "hello@example.com";
//Should parse into:
string username = "hello";
string domain = "example.com";
Run Code Online (Sandbox Code Playgroud)

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


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

Bri*_*ndy 92

使用MailAddress

MailAddress addr = new MailAddress("hello@site.com");
string username = addr.User;
string domain = addr.Host;
Run Code Online (Sandbox Code Playgroud)

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

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

在上述两种情况中:

Debug.Assert(username.Equals("hello"));
Debug.Assert(host.Equals("site.com"));
Run Code Online (Sandbox Code Playgroud)

在文件的顶部,其余的using指令添加:

using System.Net.Mail;
Run Code Online (Sandbox Code Playgroud)


Bra*_*tie 13

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

  • 对于丢失的分号?把编译错误看得太认真了,不是吗? (14认同)
  • 是的,我一直希望发布在SO上的实际代码至少可以编译.否则说它是伪代码. (2认同)

hun*_*ter 6

string username = email.Split('@')[0];
string domain = email.Split('@')[1];
Run Code Online (Sandbox Code Playgroud)

  • 虽然事件很好地证明了这个想法,但它却树立了一个坏榜样.两次调用"Split"是低效的,并且在将来发生变化时需要更多的维护. (2认同)
  • "我正在寻找最短的代码来做到这一点,不一定有效率." :) (2认同)
  • 那么,这通常是我们每隔一两年升级一次计算机的原因. (2认同)