JavaScript:如何从电子邮件地址中提取姓名

您想使用 JavaScript 从某人的电子邮件地址获取其姓名吗?本文将向您展示如何通过简单易行的步骤来完成此操作。

电子邮件地址结构

在我们进入 JavaScript 解决方案之前,我们首先了解电子邮件地址的结构。基本电子邮件地址由“@”分隔的两部分组成。符号 - 本地部分和域部分。本地部分通常是个人或服务的名称,而域部分代表托管电子邮件的域。

典型的电子邮件地址如下所示:name@domain.tld。但是,电子邮件地址也可以采用其他格式,例如 Name <name@domain.tld>。在本例中,个人姓名与电子邮件地址通过一对尖括号分隔。

JavaScript 方法

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 等流行且合格的电子邮件服务的电子邮件,您将需要投入时间来捕获所有边缘情况。

#javascript 

JavaScript:如何从电子邮件地址中提取姓名
1.30 GEEK