var($ email,FILTER

我只是设置了表单的验证,我决定尝试使用filter_var函数来检查我的电子邮件地址的有效性。 我无法找到filter_var实际上允许的任何地方(因为文档非常简单),并且我发现它允许像test @ test这样的电子邮件地址。 在域中不必有.com,.net等...吗?


这种行为在四月份左右发生了变化。 请参阅错误#49576和修订版297350。

该电子邮件确实无效,或者至少这是PHP开发人员所理解的。 信息来源载有此通知:

/*
 * The regex below is based on a regex by Michael Rushton.
 * However, it is not identical.  I changed it to only consider routeable
 * addresses as valid.  Michael's regex considers a@b a valid address
 * which conflicts with section 2.3.5 of RFC 5321 which states that:
 *
 *   Only resolvable, fully-qualified domain names (FQDNs) are permitted
 *   when domain names are used in SMTP.  In other words, names that can
 *   be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed
 *   in Section 5) are permitted, as are CNAME RRs whose targets can be
 *   resolved, in turn, to MX or address RRs.  Local nicknames or
 *   unqualified names MUST NOT be used.

更新日志提到了PHP 5.3.3和PHP 5.2.14的这个错误修复。


这是一个有效的电子邮件地址。 它不会在互联网上工作(至少不是在今天),但是对于本地地址来说,这没问题。

我会假设开发人员正在采取明智的方法来检查电子邮件地址,并且不建立自己的系统,只要引入新的顶级域名(TLD)就能保证系统过时。 我们有足够的电子邮件地址语法检查程序,可以foo@example.museum原样拒绝foo@example.museum


test @ test在语法上是有效的。

从RFC 5321:

在电子邮件地址中使用顶级域名的情况下,使用单个字符串而没有任何点。

只有在这之后才会说:

在SMTP中使用域名时,只能使用可解析的完全限定域名(FQDN)。 换句话说,可以解析为MX RR或地址(即A或AAAA)RR的名称(如第5节中所述)是允许的,因为CNAME RR的目标可以依次解析为MX或地址RR 。 不得使用本地昵称或非限定名称。

这并不一定排除只有TLD的域名。 实际上,运行以下代码:

checkdnsrr('ua', 'MX') // Returns true

getmxrr('ua',$ array)//返回true

仅TLD域名(可以)具有MX记录并且正在使用中:http://www.to/是一个示例。 以下是一些有效的TLD专用域名电子邮件地址:

文斯@ AI

保罗@ IO

根@公里

Joost的@ TK

管理员@ TT

hostmaster @ UA

示例电子邮件地址的来源:Tony Finch - 带MX的TLD

链接地址: http://www.djcxy.com/p/16531.html

上一篇: var($email, FILTER

下一篇: Regex to reject specific email