我想验证一个字符串,它可以是一封电子邮件或以逗号分隔的多封电子邮件。
例如:
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/