2013-08-22 5 views
22

С javascript, как мы удаляем @ gmail.com или @ aol.com из строки, так что остается только имя?Как получить имя с адреса электронной почты

var string = "[email protected]"; 

Будет просто "johdoe"? Я пробовал с расколом, но это не закончилось хорошо. Благодарю.

+4

Что проблема у вас с 'расколе («@»)'? – icedwater

+2

@icedwater проблема с '.split ('@')' заключается в том, что '@' разрешено как часть * имени/адреса *, как в 'im @ home @ example.com' - в этом случае' split' не может убедитесь, что '[0]' -й результат является фактическим полным именем строки 'im @ home', но скорее приведет к только' im'. –

ответ

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 

выше также будет работать для действительных имен, содержащих @ (tools.ietf.org/html/rfc3696Page 5)

джон \ @doe
"джон @@". Лань
" j @ hn ".d \ @e

+0

Да, это сработало. Я не знал, что это так просто. благодаря! – leeshin

+0

* Убедитесь, что вы не указали переменную 'String' (с капиталом« S »). Не пытайтесь быть педантичным, но это зарезервированное ключевое слово. – Gary

+0

Мой комментарий был бы более уместным по вопросу, а не вашему ответу – Gary

4

Попробуйте его с помощью substring() и indexOf()

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

@Roko спасибо.Я из мобильных –

+2

Y'W! +1 для * другого способа сделать это * tho Мне нравится больше простота '.split()' Я также ненавижу давать ответы с моего телефона, особенно когда дело касается нажатия кнопки «Редактировать» (миссия невозможна) :) –

+0

Еще раз спасибо. Я нахожусь на пути своего офиса. –

10

Вы должны принять к сведению, что адрес электронной почты является невероятно сложным объектом и могут содержать несколько @ знаков (реф. http://cr.yp.to/im/address.html).

«Доменная часть адреса - это все после окончательного @».

Таким образом, вы должны сделать что-то эквивалентное:

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

или еще короче,

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

Если вы хотите, как имя и домен/имя хоста, то это будет работать:

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

адрес электронной почты может содержать другой '@', если он включен в '' '' quotes. http://tools.ietf.org/html/rfc3696 'Эти цитируемые формы редко рекомендуются и на практике необычны. http://i.imgur.com/SfgsLuN.jpg –

+1

@ RokoC.Buljan Ваш скриншот Gmail - это не имеет значения. Каждому хосту всегда приходилось определять и проверять собственный формат идентификатора почтового ящика в широком диапазоне, определяемом документами, датируемыми за многие годы до того, который вы цитируете. Даже тот, который вы цитируете, утверждает одно и то же: «... они не должны отвергаться в процедурах фильтрации, но [sic] следует вместо этого передавать в почтовую систему для оценки хостом назначения». Кроме того, вы не закончили цитату: «** редко используются на практике, но требуются для некоторых законных целей **». –

+0

@ RokoC.Buljan Re мой предыдущий комментарий. Приведенный вами параграф немного отличается от того, который, как я думал, вы цитировали, но даже тот, который вы цитировали, продолжает говорить об этом: «и на практике редко, но, как обсуждалось выше, ** должен поддерживаться приложениями, которые обрабатываются адрес электронной почты**." –

3

И еще одна альтернатива с использованием split:

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

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

Вы можете попробовать с помощью замены() и регулярного выражения. Вы можете прочитать больше о замене() с помощью регулярных выражений here

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

Это возвращает строку перед @

Смежные вопросы