2010-12-14 2 views
24

Как получить имя пользователя и домен из адреса электронной почты:Разобрать обычный адрес электронной почты, на 2 часть

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

Я ищу самый короткий код, чтобы сделать это, не обязательно эффективно.

Сценарий: Я хочу проанализировать его в своем представлении ASP.NET MVC, чтобы я мог его скрыть.

+1

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

+0

Используйте решение Брайана Бонди. Все, что использует 'string.Split', во многих случаях будет терпеть неудачу. Теперь, где обязательное (и безнадежно неправильное) решение регулярных выражений? –

+3

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

ответ

81

Используйте MailAddress класса

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

Этот метод имеет преимущество также разбор ситуаций, как это (и другие вы не можете ожидать):

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

В обоих случаях:

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

В верхней части файла с остальными вашими использованием директив добавить:

using System.Net.Mail; 
+0

Небольшое примечание: MailAddress недоступен в приложении для Windows Store. –

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

-1 даже не компилируется –

+9

За недостающую точку с запятой? Принимая ошибку компиляции слишком серьезно, не так ли? –

+0

все еще не компилируется ... –

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

Событие, хотя это хорошо демонстрирует идею, оно создает плохой пример. Вызов «Сплит» дважды неэффективен и требует дополнительного обслуживания в будущем, когда ситуация изменится. – detunized

+2

«Я ищу кратчайший код для этого, не обязательно эффективный». :) – hunter

+2

Ну, обычно мы должны обновлять наши компьютеры каждые один-два года. – detunized

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

Используйте это не даст исключение, если нет домена или имя пользователя найдено вместо этого он не будет давать нулевое значение для этого ,

C#

string email = "[email protected]"; 

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

В.Б.:

Dim email as String = "[email protected]"; 
Dim username = email.Split("@".ToCharArray()).ElementAtOrDefault(0); 
Dim domain = email.Split("@".ToCharArray()).ElementAtOrDefault(1); 
Смежные вопросы