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

How to retrieve Name from Email Address

本文关键字:检索 电子邮件地址      更新时间:2023-09-26

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

var string = "johndoe@yahoo.com";

会只是"johdoe"吗?我试过分开,但结果不好。谢谢

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

以上内容也适用于包含@有效名称(tools.ietf.org/html/rfc36Page5):

john@doe
"约翰;。doe
"j@hn";.d@e

  • String.protype.substring()
  • String.protype.lastIndexOf()

使用RegExp:

如果电子邮件值已经验证,String.protype.match()可以用来检索所需的名称,domain:

字符串匹配:

const name   = email.match(/^.+(?=@)/)[0];    
const domain = email.match(/(?<=.+@)[^@]+$/)[0]; 

捕获组:

const name   = email.match(/(.+)@/)[1];    
const domain = email.match(/.+@(.+)/)[1];

要在数组中获得两个片段,请使用String.protype.split()在最后一个@字符处拆分字符串:

const [name, domain] = email.split(/(?<=^.+)@(?=[^@]+$)/);
console.log(name, domain);

或者简单地使用CCD_ 3
下面是一个使用可重用函数getEmailFragments( String ) 的示例

const getEmailFragments = (email) => email.split(/@(?=[^@]*$)/);
[ // LIST OF VALID EMAILS:
  `info@example.com`,
  `john@doe@example.com`,
  `"john@@".doe@example.com`,
  `"j@hn".d@e@example.com`,
]
.forEach(email => {
  const [name, domain] = getEmailFragments(email);
  console.log("DOMAIN: %s NAME: %s ", domain, name);
});

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

"地址的域部分是最后一个@之后的所有内容。"

因此,你应该做一些等效的事情:

var email = "johndoe@yahoo.com";
var name = email.substring(0, email.lastIndexOf("@"));

或者甚至更短的

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

如果您想要名称和域/主机名,那么这将起作用:

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 */
}

还有另一个使用拆分的替代方案:

var email = "john.doe@email.com";
var sp = email.split('@');
console.log(sp[0]); // john.doe
console.log(sp[1]); // email.com

尝试使用substring()indexOf()

var name = email.substring(0, email.indexOf("@"));
var email = "johndoe@yahoo.com";
email=email.replace(/@.*/,""); //returns string (the characters before @)

您可以尝试使用replace()和正则表达式。你可以在这里阅读更多关于使用regex替换()的信息

var myEmail = 'johndoe@yahoo.com';
var name= myEmail.replace(/@.*/, "");
console.log(name);

这将返回@

之前的字符串

如如何在Javascript中从电子邮件地址中删除或获取域名?中所示?,你可以使用以下代码:

const getDomainFromEmail = email => {
  let emailDomain = null;
  const pos = email.search('@'); // get position of domain
  if (pos > 0) {
    emailDomain = email.slice(pos+1); // use the slice method to get domain name, "+1" mean domain does not include "@"
  }
  return emailDomain;
 };
const yourEmail = "jonth.nt49@4codev.com"
 console.log(getDomainFromEmail(yourEmail));
 // result : 4codev.com

这个简单的正则表达式将完成所需的操作
/^.*(?=@)/g

示例:

"johndoe@yahoo.com".match(/^.*(?=@)/g); // returns Array [ "johndoe" ]