验证多封用javascript逗号分隔的电子邮件
我想验证一个字符串,它可以是一封电子邮件,也可以是多封用逗号分隔的电子邮件 例如: 比尔。gates@hotmail.com->正确验证多封用javascript逗号分隔的电子邮件,javascript,regex,Javascript,Regex,我想验证一个字符串,它可以是一封电子邮件,也可以是多封用逗号分隔的电子邮件 例如: 比尔。gates@hotmail.com->正确 票据->假 账单。gates@microsoft.com史蒂夫。jobs@apple.com“->正确 账单。gates@microsoft.com史蒂夫。jobs@apple.com,bob“->false 鲍勃,比尔。gates@microsoft.com史蒂夫。jobs@apple.com“->错 我提出了下一个与测试用例一起工作的代码 function v
票据->假
账单。gates@microsoft.com史蒂夫。jobs@apple.com“->正确
账单。gates@microsoft.com史蒂夫。jobs@apple.com,bob“->false
鲍勃,比尔。gates@microsoft.com史蒂夫。jobs@apple.com“->错 我提出了下一个与测试用例一起工作的代码
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;
}
功能验证邮件(字段){
var regex=/\b[A-Z0-9.\uz0%+-]+@[A-Z0-9.-]+\[A-Z]{2,4}\b/i;
返回(正则表达式测试(字段))?真:假;
}
函数validateMultipleEmailsCommamSeparated(值){
var结果=值。拆分(“,”);
for(变量i=0;i
这是最快的方法吗?如果我想允许;并且,作为分隔符呢?如何将字符串拆分成一个数组,然后一次只通过一个电子邮件地址在其中循环?使用
var result=value.split(“,”)
。你最终得到一个数组。你不应该将顶级域与[a-Z]{2,4}匹配
:
那么.museum
或旅行
呢?像.xn--0zwm56d
或.xn--11b5bs3a9aj6g
这样的IDNA域名呢
此外,有一个像“johndoe”@example.org
这样的电子邮件地址也是非常有效的
在我看来,您应该在客户端检查地址是否包含@
,以及地址后面是否至少有一个
。在服务器端,您可以检查服务器是否存在(您甚至可能想尝试连接到适当的SMTP端口),或者发送验证邮件
其他一切都容易出错,因为实际的正则表达式检查有效的电子邮件地址
还有这个
return (regex.test(field)) ? true : false;
是一个严重的WTF-test()
已返回布尔值
如果希望允许使用不同的分隔符,请使用正则表达式而不是字符串进行拆分,例如
value.split(/,|;/)
一般来说,验证电子邮件地址是不可能的。语法上有效的东西不一定去任何地方,即使去了也不一定会被读取
即使如此,覆盖所有可能的语法正确地址(根据适用的RFC)需要一个极其复杂的正则表达式(参见第一版的“掌握正则表达式”(Friedl,O'Reilly)以了解4724或6598字符版本,这些可能不处理IDN)例如,撇号在本地部分是有效字符,您可以在电子邮件中发表评论。Regex:
((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*
我使用validationEngine和underline.js来实现这一点:
function validateEmail(field, rules, i, options) {
if (!_.all(field.val().split(","), function(candidate) { return $.trim(candidate).match(options.allrules.email.regex); } ))
return options.allrules.email.alertText;
}
然后用以下内容装饰我的表单字段:
<input class="validate[required,funcCall[validateEmail]]" type="text" name="contact_email" id="contact_email" value="" />
我会在
validateMultipleEmailsCommaseSeparated
函数中加入$.trim(结果[I])
,因为很多人会在逗号后添加空格
当然,这是一个jQuery问题,所以按照您的方式做同样的事情。将此用于php preg\u match\u all()
数组(2){
[0] =>
阵列(5){
[0] =>
字符串(11)”abc@efg.com"
[1] =>
字符串(11)”hij@emg.com"
[2] =>
字符串(13)”asfbd@efg.com"
[3] =>
字符串(11)”ab@sdfs.com"
[4] =>
字符串(15)“abc+efg@pqr.com"
}
[1] =>
阵列(5){
[0] =>
字符串(11)”abc@efg.com"
[1] =>
字符串(11)”hij@emg.com"
[2] =>
字符串(13)”asfbd@efg.com"
[3] =>
字符串(11)”ab@sdfs.com"
[4] =>
字符串(15)“abc+efg@pqr.com"
}
}
试试这个
function validateEmails(string) {
var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var result = string.replace(/\s/g, "").split(/,|;/);
for(var i = 0;i < result.length;i++) {
if(!regex.test(result[i])) {
return false;
}
}
return true;
}
函数validateEmails(字符串){
var regex=/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var result=string.replace(/\s/g,“”).split(/,|;/);
for(变量i=0;i
接受逗号和分号作为分隔符,如果您只希望逗号作为分隔符,则更改为建议编辑:“。。。您应该在客户端检查地址是否包含**一个且只有一个**@…(但是,我认为本地部分不允许使用“@”)@克里斯汀:“@”可以用引号括起来,但只有在那里;我从未见过使用引号括起来的字符串,尽管它们可能提供了一种混淆垃圾邮件机器人的简单方法;人们还应该记住,下面的字符即使不加引号也是有效的:!#$%&'*+-/=?^{124;~btw,我想我曾经读到,甚至有人在“@”之后使用原始ccTLD域的邮件地址;不过,我不记得是哪个国家了。。。
function validateEmails(string) {
var regex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
var result = string.replace(/\s/g, "").split(/,|;/);
for(var i = 0;i < result.length;i++) {
if(!regex.test(result[i])) {
return false;
}
}
return true;
}