Javascript验证电子邮件地址列表以逗号分隔

时间:2022-10-23 16:39:41

I am using ServiceNow and I need to validate a textbox that will accept a list of email addresses that are separated by commas.

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

The list of email addresses is in the variable group_members.

电子邮件地址列表位于变量group_members中。

The validation works for the first email address only. The second email address in the list is showing as invalid even though I have tested with a list of valid addresses. For example:

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

Testa@example.com, testb@example.com

testa will show up as valid but testb will be invalid. I know it is not the regex because the same email address will return valid as long as it is the first in the list. I think there is something wrong with looping over the array or perhaps the way that the comma separated list is being split to the array. Can you check my logic here to see what is wrong? I appreciate the help.

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 个解决方案

#1


It's because you have a space after the comma. Either remove it or account for it in your regex.

这是因为你在逗号之后有一个空格。在正则表达式中删除它或说明它。

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>

#1


It's because you have a space after the comma. Either remove it or account for it in your regex.

这是因为你在逗号之后有一个空格。在正则表达式中删除它或说明它。

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>