2013-08-22 14 views
22

Mit Javascript, wie entfernen wir die @ gmail.com oder @ aol.com aus einer Zeichenfolge, so dass nur der Name bleibt?Wie Name von E-Mail-Adresse abrufen

var string = "[email protected]"; 

Wird nur "johdoe" sein? Ich habe es mit Split versucht, aber es endete nicht gut. Vielen Dank.

+4

lesen Was war das Problem, das Sie mit 'Split hatte ('@')'? – icedwater

+2

@icedwater das Problem mit '.split ('@')' ist, dass '@' als Teil des * Name/Adresse * wie in 'im @ home @ example.com' erlaubt ist - in diesem Fall 'Split' kann nicht stellen Sie sicher, dass das '[0]' - Ergebnis der tatsächliche vollständige Zeichenfolgenname 'im @ home' ist, aber stattdessen nur 'im' ergibt. –

Antwort

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 

Die oben wird auch für gültig Namen arbeiten enthalten @ (tools.ietf.org/html/rfc3696Seite 5)

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

+0

ja, es hat funktioniert. Ich wusste nicht, dass es so einfach war. Vielen Dank! – leeshin

+0

* Stellen Sie sicher, dass Sie die Variable 'String' nicht benennen (mit einem Großbuchstaben" S "). Nicht versuchen, pedantisch zu sein, aber es ist ein reserviertes Schlüsselwort. – Gary

+0

Mein Kommentar wäre eher für die Frage geeignet als für Ihre Antwort – Gary

4

Probieren Sie es substring() und indexOf() mit

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

@Roko danke.Ich bin von Mobile –

+2

Y'W! +1 für * eine andere Möglichkeit es zu tun * tho mag ich mehr die Einfachheit von '.split()' Ich hasse es auch, Antworten von meinem Handy zu geben, besonders wenn es darum geht, den 'Edit' Knopf zu drücken (eine Mission unmöglich) :) –

+0

Danke nochmal. Ich bin auf dem Weg zu meinem Büro. –

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

Sie sollten zur Kenntnis nehmen, dass eine gültige E-Mail-Adresse ein unglaublich anspruchsvolle Aufgabe und kann mehrere @ Zeichen (ref enthalten. http://cr.yp.to/im/address.html).

"Der Domain-Teil einer Adresse ist alles nach dem letzten @."

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

oder noch kürzer,

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

Wenn Sie sowohl den Namen und die Domain/Host-Namen, dann wird diese Arbeit:

Daher sollten Sie etwas Gleichwertiges tun:

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

eine E-Mail-Adresse könnte ein anderes '@' enthalten, wenn es in Anführungszeichen von "" enthalten ist. http://tools.ietf.org/html/rfc3696 'Diese zitierten Formen werden selten empfohlen, und sind in der Praxis selten" http://i.imgur.com/SfgsLuN.jpg –

+1

@ RokoC.Buljan Ihr Screenshot von Gmail ist irrelevant. Es war immer Aufgabe eines jeden Hosts, sein eigenes Format für die Mailboxkennung innerhalb des weiten Bereichs zu definieren und zu validieren, der durch Dokumente definiert wurde, die viele Jahre vor der von Ihnen genannten liegen. Selbst die von Ihnen zitierte sagt dasselbe aus: "... sie sollten nicht in Filterroutinen zurückgewiesen werden, sondern sollten [sic] stattdessen an das E-Mail-System zur Auswertung durch den Zielhost übergeben werden." Außerdem haben Sie das Zitat nicht beendet: "** selten in der Praxis verwendet, aber für einige legitime Zwecke benötigt **." –

+0

@ RokoC.Buljan Re meinen letzten Kommentar. Der von Ihnen zitierte Absatz unterscheidet sich geringfügig von dem, von dem Sie annahmen, dass er zitiert wurde, aber selbst der zitierte zitiert das weiter: "und sind in der Praxis ungewöhnlich, aber wie oben beschrieben, muss ** von Anwendungen unterstützt werden, die verarbeitet werden E-mailadressen**." –

3

Und eine andere Alternative mit split:

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

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

Sie können mit dem replace() und regulären Ausdruck versuchen. Sie können mehr über ersetzen() mit regex here

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

Dies gibt die Zeichenfolge vor dem @

Verwandte Themen