提问人:softboxkid 提问时间:4/21/2011 最后编辑:Elon Thansoftboxkid 更新时间:2/16/2017 访问量:2187
删除PHP中无效的电子邮件格式
Remove invalid email format in PHP
问:
Array (
[0] => [email protected]
[1] => [email protected]
[2] => invalidEmail.com
)
请注意,第三个数组值是无效的电子邮件格式。如何通过使用/创建函数来删除它?在使用该功能发送电子邮件之前,我需要有效的电子邮件。implode("," the valid email)
mail()
答:
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:8ff
abc\@[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));
但。。。
单行解决方案根本不存在(使用正则表达式或其他方法)。
要了解有关有效电子邮件地址的详细信息,请遵循以下参考资料。
引用:
- RFC 821:简单邮件传输协议
- RFC 822:ARPA 互联网文本消息格式标准
- RFC 1123:Internet 主机的要求 -- 应用程序和支持
- RFC 2142:通用服务、角色和功能的邮箱名称
- RFC 2821:简单邮件传输协议 (SMTP) - 替换为 RFC 821
- RFC 2822:Internet 消息格式 - 替换为 RFC 822
- RFC 3696:用于检查和转换名称的应用技术
- RFC 5233:筛选电子邮件筛选:子地址扩展
- RFC 5321:简单邮件传输协议 (SMTP)
- RFC 5322:Internet 消息格式
- RFC 5335:国际化电子邮件标头
一些有效的例子是:
- 甲斐@黒川.日本
- 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 作为域部分是允许的)。我知道很少有人真正使用这种地址,老实说,他们有很多问题,因为大多数邮件服务器都无法处理这种格式。
评论