2010-12-14 11 views
24

Jak uzyskać nazwę użytkownika i domenę z adresu e-mail:Parse zwykły adres e-mail na 2 części

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

szukam najkrótszy kod, aby to zrobić, niekoniecznie skuteczny.


Scenariusz: chcę przeanalizować go w moim widoku ASP.NET MVC, aby można go było ukryć.

+1

email.Split ('@') [0] i email.Split ('@') [1] – Aliostad

+0

Użyj rozwiązania Briana Bondy'ego. Wszystko, co używa 'string.Split' w wielu przypadkach może się nie udać. Teraz gdzie jest obowiązkowe (i beznadziejnie złe) rozwiązanie regex? –

+3

@ Jim:/hello/i /site\.com/ –

Odpowiedz

81

użyć klasy MailAddress

MailAddress addr = new MailAddress("[email protected]"); 
string username = addr.User; 
string domain = addr.Host; 

Metoda ta ma tę zaletę, także analizę składniową takich sytuacjach (i nie tylko, że nie może być oczekujących):

MailAddress addr = new MailAddress("\"Mr. Hello\" <[email protected]>"); 
string username = addr.User; 
string host = addr.Host; 

W obu przypadkach powyżej:

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

Na początku pliku z resztą swoich zastosowaniem dyrektyw dodać:

using System.Net.Mail; 
+0

Mała uwaga: MailAddress nie jest dostępny w aplikacji Windows Store. –

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

-1 nie kompiluje się –

+9

Brakujący średnik? Poddanie błędu kompilacji trochę zbyt poważnie, nieprawdaż? –

+0

nadal nie kompiluje ... –

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

Zdarzenie, chociaż dobrze to ilustruje, stanowi zły przykład. Wywołanie "Split" dwukrotnie jest nieefektywne i wymaga więcej konserwacji w przyszłości, gdy coś się zmieni. – detunized

+2

"Szukam najkrótszego kodu, aby to zrobić, niekoniecznie wydajnego." :) – hunter

+2

Cóż, to zwykle dlatego, że musimy aktualizować nasze komputery co rok lub dwa lata. – detunized

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

Użyj tego nie da wyjątek, gdy nie ma domeny lub nazwa zamiast tego da zerową wartość tej ,

C#:

string email = "[email protected]"; 

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

VB:

Dim email as String = "[email protected]"; 
Dim username = email.Split("@".ToCharArray()).ElementAtOrDefault(0); 
Dim domain = email.Split("@".ToCharArray()).ElementAtOrDefault(1);