Разобрать простой адрес электронной почты на 2 части

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

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

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


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

31
задан 16.05.2020, 23:16

5 ответов

Используйте класс 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 System.Net.Mail;
92
ответ дан 16.05.2020, 23:16
  • 1
    Я don' t думают, что Вам даже нужно :format там:) – BeMathis 26.10.2019, 14:54
  • 2
    Маленькое примечание: MailAddress не доступен в Windows Store App. – Cœur 16.05.2020, 23:17
String[] parts = "hello@example.com".Split(new[]{ '@' });
String username = parts[0]; // "hello"
String domain = parts[1]; // "example.com"
13
ответ дан 16.05.2020, 23:17
  • 1
    @BeMathis can' t быть уверенным what' s на стороне контроллера вещей.. Если он использует что-то как respond_to { |format| format.js } для рендеринга тогда you' d совершенно определенно нужно format: "js" или you' d получают ActionController::UnknownFormat ошибка – Dan Bradbury 26.10.2019, 14:54
  • 2
    - 1 doesn' t даже компилируют – Mauricio Scheffer 16.05.2020, 23:17
  • 3
    Для недостающей точки с запятой? Относясь к ошибке компиляции немного слишком серьезно, not' t мы? – Brad Christie 16.05.2020, 23:18
  • 4
    все еще doesn' t компиляция... – Mauricio Scheffer 16.05.2020, 23:18
  • 5
    И да, я всегда ожидаю, что фактический код, отправленный на ТАК, будет, по крайней мере, компилируемым. Иначе скажите it' s псевдокод. – Mauricio Scheffer 16.05.2020, 23:18
string username = email.Split('@')[0];
string domain = email.Split('@')[1];
6
ответ дан 16.05.2020, 23:18
  • 1
    Формат: ' json' был тем, что я искал. Спасибо! – TheNastyOne 26.10.2019, 14:55
  • 2
    " I' m поиск самого короткого кода, чтобы сделать это, не обязательно эффективное ":) – hunter 16.05.2020, 23:18
  • 3
    Событие, хотя это демонстрирует идею приятно, она подает плохой пример. Вызов Split дважды неэффективен и требует большего количества обслуживания в будущем, когда вещи изменяются. – detunized 16.05.2020, 23:19
  • 4
    Ну, that' s обычно, почему мы должны обновить наши компьютеры все или два года. – detunized 16.05.2020, 23:19
  • 5
    @detunized согласован... Я не сделал бы этого этот путь, но это - то, что он хотел – hunter 16.05.2020, 23:19
int i = email.IndexOf('@');
if (i >= 0)
{
    username = email.Substring(0, i);
    domain = email.Substring(i + 1);
}
1
ответ дан 16.05.2020, 23:19

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

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);
1
ответ дан 16.05.2020, 23:19
  • 1
    Протестированный это и это работают, Спасибо! –  14.10.2019, 06:33

Теги

Похожие вопросы