我想验证一个字符串,该字符串可以是用逗号分隔的电子邮件或多封电子邮件。
例如:
bill.gates@hotmail.com - > TRUE
账单 - > 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;
}
这是最快捷的方式吗?如果我想允许怎么办和,作为分隔符?
答案 0 :(得分:8)
您不应将顶级域名与[A-Z]{2,4}
匹配:
.museum
或.travel
呢?那些IDNA域名如.xn--0zwm56d
或.xn--11b5bs3a9aj6g
?
此外,拥有"John Doe"@example.org
等电子邮件地址完全有效。
在我看来,您应该在客户端检查的是,地址是否包含@
以及后面是否至少有一个.
。在服务器端,您可以检查服务器是否存在(您甚至可能想尝试连接到相应的SMTP端口)或只发送验证邮件。
其他所有内容都容易出错,因为实际的正则表达式会检查有效的电子邮件地址looks like this。
另外,这个
return (regex.test(field)) ? true : false;
是一个严重的WTF - test()
已经返回一个布尔值!
如果要允许使用不同的分隔符,请使用正则表达式而不是字符串进行拆分,例如
value.split(/,|;/)
答案 1 :(得分:3)
使用var result = value.split(",")
。你最终得到了一个数组。
答案 2 :(得分:2)
正则表达式:
((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)*([,])*)*
答案 3 :(得分:1)
通常,验证电子邮件地址 。语法上有效的东西不一定会去任何地方,即使它是否会被阅读。
即便如此,覆盖所有可能的语法正确的地址(根据适用的RFC)需要一个极其复杂的正则表达式(请参阅第一版“掌握正则表达式”(Friedl,O'Reilly)的4724或6598字符版本,这些可能不会处理IDN)。例如。撇号是本地部分的有效字符,您可以在电子邮件中添加注释。
答案 4 :(得分:0)
如何将字符串拆分成数组并循环遍历它,一次只传递一个电子邮件地址?
答案 5 :(得分:0)
我使用validationEngine和underscore.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="" />
答案 6 :(得分:0)
我会向$.trim(result[i])
函数抛出validateMultipleEmailsCommaSeparated
,因为很多人会在逗号后面添加空格。
当然这是一个jQuery的事情,所以你可以这样做。
答案 7 :(得分:0)
用于php preg_match_all()
$pattern = '/([\w+\._%-]+@[\w+\.-]+\.[\w+]{2,4}[^,;\s])/';
$text = 'abc@efg.com, efg, hij@emg.com, ak@efg asfbd@efg.com ab@sdfs.com abc+efg@pqr.com';
preg_match_all($pattern, $text, $match);
var_dump($match);
array(2) {
[0] =>
array(5) {
[0] =>
string(11) "abc@efg.com"
[1] =>
string(11) "hij@emg.com"
[2] =>
string(13) "asfbd@efg.com"
[3] =>
string(11) "ab@sdfs.com"
[4] =>
string(15) "abc+efg@pqr.com"
}
[1] =>
array(5) {
[0] =>
string(11) "abc@efg.com"
[1] =>
string(11) "hij@emg.com"
[2] =>
string(13) "asfbd@efg.com"
[3] =>
string(11) "ab@sdfs.com"
[4] =>
string(15) "abc+efg@pqr.com"
}
}
&#13;
答案 8 :(得分:0)
试试这个
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;
}
接受逗号和分号作为分隔符,如果只需要逗号作为分隔符
,请更改它