我想验证一个字符串,它可以是一封电子邮件或多个用逗号分隔的电子邮件.
例如:
bill.gates@hotmail.com - > TRUE
bill - > FALSE
bill.gates @ microsoft.com,steve.jobs @ apple.com" - > TRUE
bill.gates @ microsoft.com,steve.jobs @ apple.com,bob " - > false
bob,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
?什么IDNA域像.xn--0zwm56d
或.xn--11b5bs3a9aj6g
?
此外,拥有像这样的电子邮件地址是完全有效的"John Doe"@example.org
.
在我看来,你应该在客户端检查的是,如果地址包含一个,@
并且.
在它之后至少有一个地址.在服务器端,您可以检查服务器是否存在(您甚至可能想尝试连接到相应的SMTP端口)或只发送验证邮件.
其他一切都容易出错,因为检查有效电子邮件地址的实际正则表达式是这样的.
还有,这个
return (regex.test(field)) ? true : false;
是一个严重的WTF - test()
已经返回一个布尔值!
如果要允许不同的分隔符,请使用正则表达式而不是字符串进行拆分,例如
value.split(/,|;/)