2013-08-22 15 views
22

Con javascript, come rimuovere @ gmail.com o @ aol.com da una stringa in modo che ciò che rimane è solo il nome?Come recuperare il nome dall'indirizzo email

var string = "[email protected]"; 

Sarà solo "johdoe"? Ho provato con split ma non è andato a buon fine. Grazie.

+4

Qual è stato il problema che hai avuto con 'split ('@')'? – icedwater

+2

@icedwater il problema con '.split ('@')' è che '@' è permesso come parte del * nome/indirizzo * come in 'im @ home @ example.com' - in questo caso' split' non può garantiamo che il risultato '[0]' th è il vero nome completo della stringa 'im @ home', ma risulterà in solo' im'. –

risposta

46
var email = "[email protected]"; 
var name = email.substring(0, email.lastIndexOf("@")); 
var domain = email.substring(email.lastIndexOf("@") +1); 

console.log(name); // john.doe 
console.log(domain); // email.com 

È possibile che questo funzionerà anche per validi nomi contenenti @ (tools.ietf.org/html/rfc3696Pagina 5)

John \ @doe
"john @@". Doe
" j @ hn ".d \ @e

+0

sì, ha funzionato. non sapevo che fosse così semplice. Grazie! – leeshin

+0

* Assicurati di non nominare la variabile 'String' (con una" S "maiuscola). Non cercare di essere pedante, ma è una parola chiave riservata. – Gary

+0

Il mio commento sarebbe stato più appropriato sulla domanda piuttosto che la tua risposta – Gary

4

Provalo usando substring() e indexOf()

var name = email.substring(0, email.indexOf("@")); 
+0

@Roko ringraziamenti.Vengo dal cellulare –

+2

Y'W! +1 per * un altro modo per farlo * tho Mi piace di più la semplicità di '.split()' Odio anche dare risposte dal mio telefono, specialmente quando si tratta di premere il pulsante 'Modifica' (una missione impossibile) :) –

+0

Grazie ancora. Sto arrivando nel mio ufficio. –

1
var email = "[email protected]"; 
email=email.replace(/@.*/,""); //returns string (the characters before @) 
10

Si dovrebbe prendere atto che un indirizzo email valido è un oggetto incredibilmente sofisticata e può contenere più @ segni (rif. http://cr.yp.to/im/address.html).

"La parte del dominio di un indirizzo è tutto dopo il @ finale."

Quindi, si dovrebbe fare qualcosa di equivalente a:

var email = "[email protected]"; 
var name = email.substring(0, email.lastIndexOf("@")); 

o anche più breve,

var name = email.replace(/@[^@]+$/, ''); 

Se si desidera che sia il nome e il dominio/hostname, allora questo lavoro:

var email = "[email protected]"; 
var lasta = email.lastIndexOf('@'); 
var name, host; 
if (lasta != -1) { 
    name = email.substring(0, lasta); 
    host = email.substring(lasta+1); 
    /* automatically extends to end of string when 2nd arg omitted */ 
} else { 
    /* respond to invalid email in some way */ 
} 
+0

un indirizzo email potrebbe contenere un altro '@' se incluso in virgolette "" "'. http://tools.ietf.org/html/rfc3696 'Questi moduli citati sono raramente raccomandati, e sono rari nella pratica. http://i.imgur.com/SfgsLuN.jpg –

+1

@ RokoC.Buljan Lo screenshot di Gmail è irrilevante. È sempre stato compito di ciascun host definire e convalidare il proprio formato di identificatore della casella di posta all'interno dell'intervallo definito dai documenti che risalgono a molti anni prima di quello che si cita. Anche quello che cita afferma la stessa cosa: "... non dovrebbero essere rifiutati nelle routine di filtraggio, ma, [sic] dovrebbero invece essere passati al sistema di posta elettronica per la valutazione da parte dell'host di destinazione." Inoltre, non hai terminato la citazione: "** usato raramente nella pratica, ma è richiesto per alcuni scopi legittimi **." –

+0

@ RokoC.Buljan Re il mio commento precedente. Il paragrafo che hai citato è leggermente diverso da quello che pensavo hai citato, ma anche quello che hai citato continua a dire questo: "e sono rari nella pratica, ma, come discusso sopra, ** devono essere supportati dalle applicazioni che stanno elaborando indirizzi email**." –

3

E un'altra alternativa con split:

var email = "[email protected]"; 
var sp = email.split('@'); 

console.log(sp[0]); // john.doe 
console.log(sp[1]); // email.com 
1

Si può provare con replace() ed espressione regolare. Si può leggere di più su replace() utilizzando regex here

var string = '[email protected]'; 
var name= string.replace(/@.*/, ""); 
console.log(name); 

Questo restituisce la stringa prima @

Problemi correlati