删除PHP中无效的电子邮件格式

Remove invalid email format in PHP

提问人:softboxkid 提问时间:4/21/2011 最后编辑:Elon Thansoftboxkid 更新时间:2/16/2017 访问量:2187

问:

Array (
    [0] => [email protected]
    [1] => [email protected]
    [2] => invalidEmail.com
)

请注意,第三个数组值是无效的电子邮件格式。如何通过使用/创建函数来删除它?在使用该功能发送电子邮件之前,我需要有效的电子邮件。implode("," the valid email)mail()

PHP的 阵 列 验证 功能 电子邮件验证

评论


答:

12赞 deceze 4/21/2011 #1
$valid = array_filter($emails, create_function('$s', 'return filter_var($s, FILTER_VALIDATE_EMAIL);'));

或者对于 PHP 5.3+:

$valid = array_filter($emails, function ($s) { return filter_var($s, FILTER_VALIDATE_EMAIL); });
2赞 Sourav 4/21/2011 #2
<?php
$len=count($array);
for ($i=0;$i<$len;$i++)
  if (preg_match('^[a-z0-9!#$%&*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+(?:[a-z]{2,4}|museum|travel)$/i',$array[$i]))
      echo $array[$i];
?>

评论

0赞 Wh1T3h4Ck5 4/21/2011
+1 这仅用于基本验证。将 IPv6 作为域部分或用户名部分中转义的特殊字符的地址无法通过此验证。例如,,等。为了提供准确的电子邮件验证,您需要多个正则表达式,对吧?alex@2dc0:34::ff92:8ffabc\@[email protected]
0赞 deceze 4/21/2011
虽然这本身并没有错(好吧,至少我假设,没有费心破译这个正则表达式),但您应该使用内置过滤器,它们更易于阅读和维护,并且可能更准确。请注意,AFAIK PHP 电子邮件过滤器也没有通过所有晦涩难懂的 RFC 规范。
0赞 softboxkid 4/21/2011
感谢您的回复。我提出了新的函数函数 getValidEmail($array) { $s = 0; $arr = null; $len = count($array); for ($i=0; $i<$len; $i++) { if (preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is',$array[$i])) { $arr[$s++] = trim($array[$i]);返回$arr;}
1赞 Wh1T3h4Ck5 4/21/2011 #3

基本解决方案很简单,不需要正则表达式

  $isvalid = filter_var('[email protected]', FILTER_VALIDATE_EMAIL));

但。。。

单行解决方案根本不存在(使用正则表达式或其他方法)。

要了解有关有效电子邮件地址的详细信息,请遵循以下参考资料。

引用:

一些有效的例子是:

  • 甲斐@黒川.日本
  • Rδοκιμή@παράδειγμα
  • Pelé@example.com
  • jsmith@[192.168.2.1]
  • abc@[email protected]

这些添加不符合 RFC 5322 标准,但它们仍然有效。

即使您验证某些地址是否正确,也无法保证您的电子邮件服务器会接受它们。

评论

1赞 deceze 4/21/2011
不幸的是,现实世界中没有人真正符合所有这些规范。:-(因此,在本问题的上下文中,“有效电子邮件”仅表示“通常被认为是有效电子邮件地址并在现实生活中实际使用的 RFC 规范的子集”。虽然我同意在验证电子邮件时应该努力完全符合RFC标准,以避免当前状况的进一步恶化,但似乎几乎不可能建立或找到这样的验证器。
2赞 Wh1T3h4Ck5 4/21/2011
@deceze,我完全同意你的看法。我还在我的网站上使用基本验证(+IPv4 和 IPv6 作为域部分是允许的)。我知道很少有人真正使用这种地址,老实说,他们有很多问题,因为大多数邮件服务器都无法处理这种格式。