JavaScript验证逗号分隔的电子邮件地址列表

5

我正在使用ServiceNow,需要验证一个文本框,该文本框可以接受由逗号分隔的电子邮件地址列表。

电子邮件地址列表存储在变量group_members中。

验证仅适用于第一个电子邮件地址。即使我已经使用有效地址列表进行了测试,列表中的第二个电子邮件地址也显示为无效。例如:

Testa@example.com, testb@example.com

testa将显示为有效,但testb将无效。我知道这不是正则表达式的问题,因为只要它是列表中的第一个电子邮件地址,相同的电子邮件地址将返回有效。我认为循环数组或者将逗号分隔列表拆分到数组中的方法有问题。
您能否检查我的逻辑以查看问题出在哪里?

var group_members = g_form.getValue('u_group_members');
var member_split = group_members.split(',');

for (var n = 0; n < member_split.length; n++) {
  var member_info = member_split[n];
  var validRegExp = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;

    if (member_info.search(validRegExp) == -1) {
        g_form.showFieldMsg('u_group_members', "Group Members contains an invalid email address. " , 'error');
    }
    else if (member_info.search(validRegExp) == 0) {
        g_form.showFieldMsg('u_group_members', "Group Members email addresses are valid");
    }
}
1个回答

4
这是因为逗号后面有一个空格。要么删除它,要么在你的正则表达式中加入它。

var group_members = "testa@example.com, textb@example.com";

document.getElementById('space').addEventListener('click', function(){
  document.getElementById('el').innerHTML = "";
  run();
});

document.getElementById('trim').addEventListener('click', function(){
  document.getElementById('el').innerHTML = "";
  run(true);
});

function run(trim) {
  var member_split = group_members.split(',');

  var valid = true;
  for (var n = 0; n < member_split.length; n++) {
    var member_info = trim ? member_split[n].trim() : member_split[n];
    var validRegExp = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;

    if (member_info.search(validRegExp) === -1) {
        valid = false;
        break;
    }
  }
  if (valid)
    document.getElementById("el").innerHTML += "Group Members email addresses are valid.<br/>";
  else
    document.getElementById("el").innerHTML += "Group Members contains an invalid email address.<br/>";
}
<button id="space">Space</button><button id="trim">Trim it</button>
<div id="el"><div>


2
在测试之前运行 member_info=member_info.trim() 以去除字符串开头和结尾的不必要空格。 - anroesti
非常感谢。在我的实现中,我创建了var = emailNo = n + 1;,并将其放置在valid = false之后,然后将其包含在.innerHTML中,例如'电子邮件 #'+emailNo+' 包含一个错误'。这样,如果列表很长,用户可以快速定位出错的电子邮件。 - dot-punto-dot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接