2

我有一个包含一个或多个“完整”电子邮件地址的表单字段。“完成”是指格式Personal Name <person@domain.com>

多个“完整”电子邮件地址用分号分隔。列表末尾可能有也可能没有最后的分号。我想将名称提取到一个字段中,将电子邮件地址提取到另一个字段中。

所以 :

full_email = "Person name <parson@domain.com> ; Another person <another@domain.com> ; " 
email_only is set to  "parson@domain.com ; another@domain.com ;" 
name_only is set to  "Person name ; Another person ;"

是否有一些 reg exp / jQuery 天才可以将 < 和 > 之间的所有内容复制到第二个字段中,将 < 之前的所有内容复制到第三个字段中,并以迭代/递归方式对整个“完整”电子邮件地址列表进行操作以生成两个用分号分隔的纯电子邮件地址和纯姓名列表?

4

4 回答 4

2

我认为您可以在没有正则表达式或 jQuery 的情况下执行此操作,只需拆分;以获取条目,然后<继续获取条目的各个部分。这是一个jsFiddle来演示。

var full_email = "Person name <parson@domain.com> ; Another person <another@domain.com> ; " ;

var email_only = [];
var name_only = [];

var entries = full_email.split(';');

for(var i = 0; i < entries.length; i++)
{
    var entry = entries[i];
    if (entry.contains('<')){
        var parts = entry.split('<');

        name_only.push(parts[0].trim());
        email_only.push(parts[1].substr(0, parts[1].indexOf('>')));
    }
}

// The arrays
console.log(email_only);
console.log(name_only);

// Joined back to ; separated strings
console.log(email_only.join('; '));
console.log(name_only.join('; '));
于 2012-04-24T20:02:19.573 回答
1

这是从您的输入构建两个数组的全 JavaScript 方法:

var full_email = "Person name <parson@domain.com> ; Another person <another@domain.com> ; " 
var email_only = new Array();
var name_only = new Array();

step1= full_email.split(';');
for(var i=0;i<step1.length-1;i++){
    step2 = step1[i].trim();
    step3 = step2.split('<');
    email_only.push(step3[1].slice(0,-1).trim());
    name_only.push(step3[0].trim());
}

console.log(email_only,name_only);

​jsFiddle 示例

于 2012-04-24T20:31:36.503 回答
1

您可以使用javascript 中的split方法首先拆分每个地址...

var emails = "";
var names = "";
$.each(full_email.split(';'), function(index,val){
    var contact_array = val.split('<');
    var name = contact_array[0];
    var email = contact_array[1];
    email = email.substring(0,email.indexOf('>'));
    emails += email + "; ";
    names += name + "; ";
});

因此,您可以随心所欲地使用名称和电子邮件。您也可以在名称上使用trim方法,希望这是您要查找的内容。

于 2012-04-24T20:01:57.967 回答
0

如果您从 full_name 字符串中删除不必要的空格,此脚本将处理它。小提琴:http: //jsfiddle.net/GvGoldmedal/CacU8/

var full_email = "Person name <parson@domain.com>;Another person <another@domain.com>;";
var array = full_email.split(";");

var substr = "";
var subsplit = "";
var names = new Array();
var emails = new Array();


for( var x=0; x < array.length - 1; x++)
{
    substr = array[x];
    subsplit = substr.split(" ");
    //Email and Name Exists
    if (subsplit.length > 2)  
    {
        names.push(subsplit[0] + " " + subsplit[1]);
        subsplit[2] = subsplit[2].replace("<", "");
        subsplit[2] = subsplit[2].replace(">", "");
        emails.push(subsplit[2]);
    }
    else if (subsplit.length = 2) // Only Name
    {
        names.push(subsplit[0] + " " + subsplit[1]);
    }
    else // only email
    {
        subsplit = subsplit.replace("<", "");
        subsplit = subsplit.replace(">", "");
        emails.push(subsplit);
    }
}

for (var x=0; x < names.length; x++)
{
    alert("Name:" + x + " " +names[x]);

}

for (var x=0; x < emails.length; x++)
{
    alert("Email:" + x + " " +emails[x]);

}
于 2012-04-24T20:22:08.007 回答