2010-12-14 20 views
24

¿Cómo consigo el nombre de usuario y el dominio de una dirección de correo electrónico de:dirección de correo electrónico normal en 2 partes

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

estoy buscando el código más corto para hacer esto, no necesariamente eficiente.


Escenario: Quiero analizarlo en mi vista ASP.NET MVC para poder ocultarlo.

+1

email.Split ('@') [0] y correo electrónico.Split ('@') [1] – Aliostad

+0

Use la solución de Brian Bondy. Cualquier cosa que use 'string.Split' va a fallar en muchos casos. Ahora, ¿dónde está la solución de expresiones regulares (irremediablemente incorrecta) obligatoria? –

+3

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

Respuesta

81

Utilice la clase MailAddress

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

Este método tiene la ventaja de situaciones también análisis sintáctico como esta (y otras que no puede estar esperando):

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

En los dos casos anteriores:

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

En la parte superior de su archivo con el resto de sus directivas using añadir:

using System.Net.Mail; 
+0

Nota pequeña: MailAddress no está disponible en una aplicación de Windows Store. –

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

-1 ni siquiera compila –

+9

¿Falta un punto y coma? Tomando el error de compilación un poco demasiado en serio, ¿verdad? –

+0

aún no compila ... –

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

Aunque este evento demuestra la idea muy bien, es un mal ejemplo. Llamar a 'Split' dos veces es ineficiente y requiere más mantenimiento en el futuro cuando las cosas cambian. – detunized

+2

"Estoy buscando el código más corto para hacer esto, no necesariamente eficiente". :) – hunter

+2

Bueno, esa es la razón por la cual tenemos que actualizar nuestras computadoras cada uno o dos años. – detunized

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

Utilice esta no dará excepción cuando hay dominio o nombre de usuario encontrado su lugar se darán valor nulo para que ,

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