所以我有这个电子邮件列表:
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);
}
如何让它与许多电子邮件地址匹配并将每封电子邮件返回给我?
我不想要在返回字符上进行拆分,我无法一直认为将该列表拆分的角色。这些电子邮件是从用户剪贴板粘贴的。如果这很容易,我就不会问;)
答案 0 :(得分:2)
它以字符串形式出现,在结尾处带有返回字符 每一行。
然后只是在换行符上拆分字符串?
var email_array = str.split("\n");
答案 1 :(得分:1)
这是一种非常简单的方法。
/([^;:<>!?\n]+\@[^;:<>!?\n]+\.[^;:<>!?\n]+)/gmi
[^;:<>!?\n]
匹配除了这些字符之外的所有内容。所以[^;:<>!?\n]+
只是意味着根据需要多次匹配所有内容。
然后匹配@
符号。
然后根据需要匹配尽可能多的NOT([^;:<>!?\n]
)。
然后匹配文字点(。)。
然后DON&#T; T再次匹配这些([^;:<>!?\n]
)。
最后的gmi
被称为标志。他们的意思是:
g
表示全球化。一遍又一遍地匹配此RegEx。m
表示多行。不要在第一行电子邮件的末尾停止。i
表示不敏感。不要担心上下案件。答案 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源代码。我在其他地方使用它,所以在这里使用它是非常合适的(一致性)。
此功能可确保在拆分电子邮件后,每个电子邮件都是有效的电子邮件地址。这意味着没有任何混乱可以通过。