javascript - 验证多个用 javascript 逗号分隔的电子邮件

标签 javascript regex

我想验证一个字符串,它可以是一封电子邮件或以逗号分隔的多封电子邮件。

例如:

bill.gates@hotmail.com -> 正确
账单 -> 假
bill.gates@microsoft.com,steve.jobs@apple.com"-> 正确
bill.gates@microsoft.com,steve.jobs@apple.com, bob"-> false
鲍勃,bill.gates@microsoft.com,steve.jobs@apple.com"-> false

我得出了下一个适用于测试用例的代码。

function validateEmail(field) {
    var regex=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i;
    return (regex.test(field)) ? true : false;
}

function validateMultipleEmailsCommaSeparated(value) {
    var result = value.split(",");
    for(var i = 0;i < result.length;i++)
    if(!validateEmail(result[i])) 
            return false;           
    return true;
}

这是最快的方法吗?如果我想允许怎么办?和 , 作为分隔符?

最佳答案

您不应将顶级域与 [A-Z]{2,4} 匹配:

.museum.travel 呢? .xn--0zwm56d.xn--11b5bs3a9aj6g 这样的 IDNA 域呢?

此外,拥有像 "John Doe"@example.org 这样的电子邮件地址也是完全有效的。

在我看来,您应该在客户端检查的是地址是否包含 @ 以及它之后是否至少有一个 .。在服务器端,您可以检查服务器是否存在(您甚至可能想尝试连接到适当的 SMTP 端口)或只是发送验证邮件。

其他一切都容易出错,因为实际的正则表达式会检查有效的电子邮件地址 looks like this .


还有这个

return (regex.test(field)) ? true : false;

是一个严重的 WTF - test() 已经返回了一个 bool 值!


如果要允许不同的分隔符,使用正则表达式而不是字符串进行分割,eg

value.split(/,|;/)

关于javascript - 验证多个用 javascript 逗号分隔的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566396/

相关文章:

javascript - 使用 beforeCreated 时模板不渲染数据

javascript - 使用纯 JavaScript 进行 Soap 调用

regex - 使用 sed 处理带分隔符的文本文件

javascript - 与 [\S\s]* 匹配?与 (.)+ 正则表达式比较

javascript - 正则表达式匹配多个空格直到一个字符

javascript - 有没有一种更简单的方法可以在不捕获的情况下进行单行尝试?

javascript - jQuery - 阅读更多/阅读更少。如何替换文字?

javascript - HTML 5 媒体流用于录制功能上的视频录制问题

regex - Excel VBA 中的正则表达式

javascript - 第一场比赛之前一组,之后一组