JavaScript在电子邮件中拆分字符串

时间:2014-12-15 14:38:09

标签: javascript regex email

所以我有这个电子邮件列表:

john.doe@doe.com
john.doe@doe.com
john.doe@doe.com
john.doe@doe.com
john.doe@doe.com
john.doe@doe.com
john.doe@doe.com
john.doe@doe.com

它以字符串形式出现,有时在每行的末尾都有一个返回字符,有时它不会。我希望能够做的就是使用正则表达式从字符串中提取每封电子邮件。

所以我从here得到了这个正则表达式:

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return re.test(email);
} 

如何让它与许多电子邮件地址匹配并将每封电子邮件返回给我?

我不想要在返回字符上进行拆分,我无法一直认为将该列表拆分的角色。这些电子邮件是从用户剪贴板粘贴的。如果这很容易,我就不会问;)

3 个答案:

答案 0 :(得分:2)

  

它以字符串形式出现,在结尾处带有返回字符   每一行。

然后只是在换行符上拆分字符串?

var email_array = str.split("\n");

答案 1 :(得分:1)

这是一种非常简单的方法。

/([^;:<>!?\n]+\@[^;:<>!?\n]+\.[^;:<>!?\n]+)/gmi

说明:

[^;:<>!?\n]匹配除了这些字符之外的所有内容。所以[^;:<>!?\n]+只是意味着根据需要多次匹配所有内容。

然后匹配@符号。

然后根据需要匹配尽可能多的NOT([^;:<>!?\n])。

然后匹配文字点(。)。

然后DON&#T; T再次匹配这些([^;:<>!?\n])。

最后的gmi被称为标志。他们的意思是:

  1. g表示全球化。一遍又一遍地匹配此RegEx。
  2. m表示多行。不要在第一行电子邮件的末尾停止。
  3. i表示不敏感。不要担心上下案件。
  4. 此处的演示:https://regex101.com/r/aC5cK2/1

答案 2 :(得分:0)

所以我重新解决了@adeneo所说的问题:

$scope.pasteThis = function(e) {
    var emails = e.clipboardData.getData('text/plain');

    var emailArray = emails.split(/(\n|\s|,)/);

    angular.forEach(emailArray, function (e) {
        var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;

        if (EMAIL_REGEXP.test(e)) {
            if (!contains($scope.emailAddresses, e)) {
                $scope.emailAddresses.push(e);
            }
        }
    });
}

function contains(arr, el) {
    var found = false;
    angular.forEach(arr, function(e) {
        if (e == el) {
            found = true;
        }
    });

    return found;
}

所以EMAIL_REGEXP来自Angular源代码。我在其他地方使用它,所以在这里使用它是非常合适的(一致性)。

此功能可确保在拆分电子邮件后,每个电子邮件都是有效的电子邮件地址。这意味着没有任何混乱可以通过。