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

删除PHP中的无效电子邮件格式,php,arrays,validation,function,email-validation,Php,Arrays,Validation,Function,Email Validation,请注意,第三个数组值是无效的电子邮件格式。如何通过使用/创建函数来删除它?在使用mail()功能发送电子邮件之前,我需要将有效电子邮件发送到内爆(“,”有效电子邮件) Array ( [0] => myemail@domain.com [1] => mysecondemail@domain.com [2] => invalidEmail.com ) 或者对于PHP5.3+: $valid = array_filter($emails, create_f

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

Array (
    [0] => myemail@domain.com
    [1] => mysecondemail@domain.com
    [2] => invalidEmail.com
)
或者对于PHP5.3+:

$valid = array_filter($emails, create_function('$s', 'return filter_var($s, FILTER_VALIDATE_EMAIL);'));

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

<?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];
?>
但是

单行解决方案根本不存在(使用regex或其他方法)。 要了解有关有效电子邮件地址的更多信息,请参阅下面的参考资料

参考文献:

  • -替换为RFC 821
  • -替换为RFC 822
以下是一些有效的例子:

  • 甲斐@黒川.日本
  • RΔοκιμή@παράΔειγμα
  • Pelé@example.com
  • jsmith@[192.168.2.1]
  • abc\@xyz@domain.com
这些addrese不是标准的编译器,但它们仍然有效


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

+1这仅用于基本验证。以IPv6作为域部分的地址或用户名部分中转义的特殊字符无法通过此验证。例如,
alex@2dc0:34::ff92:8ff
abc\@xyz@something.com
,等等。要提供准确的电子邮件验证,您需要不止一个正则表达式,对吗?虽然这本身并没有错(好吧,我想至少没有费心破译这个正则表达式),但您应该使用内置,更容易阅读和维护,可能更准确。请注意,AFAIK的PHP电子邮件过滤器也不会通过所有模糊的RFC规范。谢谢回复。我推出了新的函数getValidEmail($array){$s=0;$arr=null;$len=count($array);for($I=0;$iun很幸运,现实世界中没有人真正遵守所有这些规范。:-(因此,在这个问题的上下文中,“有效电子邮件”只是指“RFC规范的子集通常被认为是有效的电子邮件地址,并在现实生活中实际使用“。虽然我同意在验证电子邮件时应努力完全遵守RFC,以避免当前状况进一步恶化,但似乎几乎不可能构建或找到这样的验证器。@deceze,我完全同意你的看法。我也在我的网站上使用基本验证(+允许使用IPv4和IPv6作为域部分)我知道很少有人真正使用这种地址,老实说,他们有很多问题,因为大多数邮件服务器无法处理这种格式。
<?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];
?>
  $isvalid = filter_var('myname@anydomain.com', FILTER_VALIDATE_EMAIL));