如何使用JavaScript从电子邮件地址中提取用户名?

27

如何使用JavaScript从以下电子邮件地址someone@example.com中提取someone?

谢谢。

9个回答

63

使用正则表达式匹配

带有安全检查

var str="someone@example.com";
var nameMatch = str.match(/^([^@]*)@/);
var name = nameMatch ? nameMatch[1] : null;

写成一行

var name = str.match(/^([^@]*)@/)[1];

使用替换表达式

带有安全检查

var str="someone@example.com";
var nameReplace = str.replace(/@.*$/,"");
var name = nameReplace!==str ? nameReplace : null;

作为一行书写

var name = str.replace(/@.*$/,"");

分割字符串

带有安全检查

var str="someone@example.com";
var nameParts = str.split("@");
var name = nameParts.length==2 ? nameParts[0] : null;

写在一行中

var name = str.split("@")[0];

每个例子的性能测试

JSPerf测试


1
以函数式方式:str.split("@").reduce(user => user) - schabluk
1
@epascarello - 为什么你(或这里的任何其他人)不使用简单的str.substring(0,str.indexOf("@"))?由于你的声望大约是我的65倍,我相信我肯定错过了什么,只是不知道是什么。 - myfunkyside
2
@epascarello 我认为我仍然可以从一个五岁孩子的问题中学习。相同的规则仍然大体适用。如果有人在2022年访问这个页面,我希望那个人仍然可以从你对我的问题的回答中学到一些东西。 - myfunkyside
1
JSPerf测试的链接已损坏。:-/ - Fernando Kosh
答案就像是7岁的孩子一样。 - epascarello
显示剩余3条评论

26
"someone@example.com".split('@')[0]

喜欢这个解决方案的简单性。 - Farzad Yousefzadeh

2
var email = "someone@example.com";

var username = email.substring(0,email.indexOf('@'))

1

用户名:

"someone@example.com".replace(/^(.+)@(.+)$/g,'$1')

服务器:

"someone@example.com".replace(/^(.+)@(.+)$/g,'$2')

1
你可以使用这个npm包从电子邮件中生成或获取用户名。
  1. 从电子邮件生成用户名

2. npm i generate-username-from-email

  1. 使用此代码从电子邮件中获取用户名:
const generateUsername = require('generate-username-from-email')
var email = "patidarparas13@gmail.com"
var username = generateUsername(email)
console.log(username)
//Output: patidarparas13

0

我的2021年更新。这将正确地从包含多个@符号的电子邮件地址中输出用户名。仅使用“@”进行拆分是不安全的,因为如果带引号,允许使用多个@符号。

JSFiddle示例

function getUsernameFromEmail(email){
    var domainArray = email.split('@')
    var domain = domainArray[domainArray.length-1]
    var reverseEmail = email.split( '' ).reverse( ).join( '' );
    var reverseDomain = domain.split( '' ).reverse( ).join( '' );
    var backwardUsername = reverseEmail.replace(reverseDomain+'@','')
    var username = backwardUsername.split( '' ).reverse( ).join( '' );
  return username;
}

console.log(getUsernameFromEmail('test@testhello@example.com'))


如果允许多个翻译,我们可以从末尾分割吗?因为最后使用的@将是正确的吗? - Sanskar Tiwari

0

// 输入:test.user@example.com。输出:Test User
// 将用户电子邮件拆分,然后将每个单词的第一个字符大写。

   public getUserName(input: string): string {
         if (!input) {
           return ''
         }
         if (!input.includes('@')) {
           return input;
         } else {
           const cleanedInput = input.split('@')[0]?.replace(/[^\w]/g, ' ').split(' ');
           const capitalizedInput = cleanedInput?.map(word => {
             return word[0]?.toUpperCase() + word.substring(1);
           }).join(' ');
    
           return capitalizedInput;
         }
      }

0

你需要的方法是 string.split(separator, limit)

"someone@example.com".split("@")[0]


0
下面的示例代码将返回myemailaddress
getUsername = (email) => {
   return email.substring(0, email.lastIndexOf("@"));
}

const userEmail = 'myemailaddress@gmail.com';
getUsername(userEmail);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接