您想使用 JavaScript 从某人的电子邮件地址获取其姓名吗?本文将向您展示如何通过简单易行的步骤来完成此操作。
在我们进入 JavaScript 解决方案之前,我们首先了解电子邮件地址的结构。基本电子邮件地址由“@”分隔的两部分组成。符号 - 本地部分和域部分。本地部分通常是个人或服务的名称,而域部分代表托管电子邮件的域。
典型的电子邮件地址如下所示:name@domain.tld。但是,电子邮件地址也可以采用其他格式,例如 Name <name@domain.tld>。在本例中,个人姓名与电子邮件地址通过一对尖括号分隔。
JavaScript 提供了多种内置方法和正则表达式,我们可以使用它们从电子邮件地址中提取姓名。我们将在本节中探索其中两种方法 - split() 方法和正则表达式。
split() 方法将String 划分为有序的子字符串列表,将这些子字符串放入数组中,然后返回该数组。该划分是通过搜索模式来完成的,其中该模式作为方法调用中的第一个参数提供。
以下是我们如何使用split()方法从电子邮件地址中提取姓名:
let email = "Scott <scott@gmail.com>";
let name = email.split('<')[0].trim();
console.log(name); // Output: Scott
在此示例中,我们在“'<'”处拆分电子邮件字符串。字符,它为我们提供了一个包含两个元素的数组。第一个元素是“Scott”,第二个元素是scott@gmail.com>。然后,我们使用 trim() 方法删除第一个元素中的尾随空格,这给了我们名称“Scott”。
但是如果电子邮件地址不包含尖括号怎么办?在这种情况下,我们可以在“@”处分割字符串。特点:
let email = "scott@gmail.com";
let name = email.split('@')[0];
console.log(name); // Output: scott
此方法很简单,并且适用于大多数电子邮件格式。但是,对于某些不寻常的电子邮件格式,它可能无法按预期工作。
您需要考虑的一件事是首先检查电子邮件地址的格式。由于它可以采用几种不同的形式,因此您需要有一个可靠的方法来首先确定格式是什么。
正则表达式或正则表达式是定义搜索模式的字符序列。在 JavaScript 中,我们可以使用它们从电子邮件地址中提取姓名。我们将再次考虑采用 Name <name@domain.tld> 格式的电子邮件地址,例如 Scott <scott@gmail.com>。
我们将使用的正则表达式是/.*(?=<)/。此模式将匹配任何字符,直到遇到 < 符号,该符号是我们格式中姓名和电子邮件之间的分隔符。
这是一个简单的函数,使用此正则表达式从电子邮件中获取名称:
function getNameFromEmail(email) {
const regex = /.*(?=<)/;
const match = email.match(regex);
return match ? match[0].trim() : null;
}
console.log(getNameFromEmail("Scott <scott@gmail.com>")); // Output: "Scott"
match() 方法返回匹配的字符串,如果未找到匹配项,则返回 null。然后,我们使用 trim() 方法删除任何前导或尾随空格。
如果您希望节省时间并避免重新发明轮子(我强烈推荐),有许多第三方库可以帮助从电子邮件地址中提取姓名。一种流行的选择是电子邮件地址库。该库提供了一组强大的工具用于解析电子邮件地址,包括提取名称。
以下是如何使用它的示例:
const emailAddress = require('email-addresses');
let email = 'Scott <scott@gmail.com>';
let parsedEmail = emailAddress.parseOneAddress(email);
console.log(parsedEmail.name); // Outputs: Scott
在此示例中,我们使用 库中的 parseOneAddress 函数来解析电子邮件地址。然后我们只需记录返回对象的 属性。email-addressesname
就其价值而言,这是我用于 Block Sender 服务的库,它是很长一段时间为我服务很好。我会推荐它来满足任何重要的电子邮件解析需求。
虽然上述方法适用于标准电子邮件格式,但对于异常或无效的电子邮件格式可能无法按预期工作。例如,如果电子邮件不包含 < 符号,则 match() 方法将返回 null,并且我们 39;将没有名字可返回。
如果电子邮件地址不符合预期格式,我们的函数将返回null。正如我们在本节前面提到的,我们可以在函数的开头添加简单的检查来检查其格式:
function getNameFromEmail(email) {
if (!email.includes('<')) {
return null;
}
const regex = /.*(?=<)/;
const match = email.match(regex);
return match ? match[0].trim() : null;
}
console.log(getNameFromEmail("scott@gmail.com")); // Output: null
现在,如果电子邮件不包含 < 符号,该函数将立即返回 null。
有时,您可能会遇到不寻常的电子邮件格式。例如,名称可能包含特殊字符,或者电子邮件可能使用不同的分隔符。在这种情况下,您需要修改正则表达式或编写自定义函数来处理这些情况。
让我们考虑一种电子邮件格式,其中名称括在方括号中,例如“[Scott] scott@gmail.com”。我们之前的函数在这里不起作用,但我们可以轻松修改正则表达式来处理这个问题:
function getNameFromEmail(email) {
const regex = /\[(.*?)\]/;
const match = email.match(regex);
return match ? match[1].trim() : null;
}
console.log(getNameFromEmail("[Scott] scott@gmail.com")); // Output: "Scott"
虽然这可能不是标准化的地址表单,但您会惊讶地发现有多少种不同格式的电子邮件,无论是否标准化。如果您要处理大量电子邮件,尤其是那些不是来自 G Suite 等流行且合格的电子邮件服务的电子邮件,您将需要投入时间来捕获所有边缘情况。