如何从电子邮件地址中检索姓名

lee*_*hin 33 javascript

使用javascript,我们如何从字符串中删除@ gmail.com或@ aol.com,以便只保留名称?

var string = "johndoe@yahoo.com";
Run Code Online (Sandbox Code Playgroud)

将只是"johdoe"?我试过分裂,但结果并不好.谢谢.

Rok*_*jan 70

var email = "john.doe@email.com";
var name   = email.substring(0, email.lastIndexOf("@"));
var domain = email.substring(email.lastIndexOf("@") +1);

console.log( name );   // john.doe
console.log( domain ); // email.com
Run Code Online (Sandbox Code Playgroud)

上述过程也适用于有效的包含姓名@(tools.ietf.org/html/rfc3696 第5页)

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


Jos*_*ers 10

您应该注意,有效的电子邮件地址是一个非常复杂的对象,可能包含多个@符号(参见http://cr.yp.to/im/address.html).

"地址的域名部分是决赛之后的所有内容@."

因此,你应该做一些相当于:

var email = "johndoe@yahoo.com";
var name = email.substring(0, email.lastIndexOf("@"));
Run Code Online (Sandbox Code Playgroud)

甚至更短,

var name = email.replace(/@[^@]+$/, '');
Run Code Online (Sandbox Code Playgroud)

如果你想要名称和域/主机名,那么这将工作:

var email = "johndoe@yahoo.com";
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 */
}
Run Code Online (Sandbox Code Playgroud)


Wto*_*wer 7

使用拆分的另一种选择:

var email = "john.doe@email.com";
var sp = email.split('@');

console.log(sp[0]); // john.doe
console.log(sp[1]); // email.com
Run Code Online (Sandbox Code Playgroud)