Javascript 验证逗号分隔的电子邮件地址列表
Javascript validate list of email addresses comma separated
我正在使用 ServiceNow,我需要验证一个文本框,该文本框将接受以逗号分隔的电子邮件地址列表。
电子邮件地址列表在变量 group_members
中。
验证仅适用于 第一个 电子邮件地址。列表中的第二个电子邮件地址显示为无效,即使我已经使用有效地址列表进行了测试。例如:
Testa@example.com, testb@example.com
testa
将显示为有效,但 testb
将无效。我知道这不是正则表达式,因为相同的电子邮件地址将 return 有效,只要它是列表中的 first。我认为遍历数组或者逗号分隔列表被拆分到数组的方式有问题。你能在这里检查我的逻辑,看看有什么问题吗?感谢您的帮助。
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");
}
}
因为你的逗号后面有一个space。要么删除它,要么在你的正则表达式中考虑它。
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>
我正在使用 ServiceNow,我需要验证一个文本框,该文本框将接受以逗号分隔的电子邮件地址列表。
电子邮件地址列表在变量 group_members
中。
验证仅适用于 第一个 电子邮件地址。列表中的第二个电子邮件地址显示为无效,即使我已经使用有效地址列表进行了测试。例如:
Testa@example.com, testb@example.com
testa
将显示为有效,但 testb
将无效。我知道这不是正则表达式,因为相同的电子邮件地址将 return 有效,只要它是列表中的 first。我认为遍历数组或者逗号分隔列表被拆分到数组的方式有问题。你能在这里检查我的逻辑,看看有什么问题吗?感谢您的帮助。
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");
}
}
因为你的逗号后面有一个space。要么删除它,要么在你的正则表达式中考虑它。
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>