为什么filter_var($ email,FILTER_VALIDATE_EMAIL)允许test @ test?

Met*_*lis 11 php email-validation

我刚刚设置了一个表单的验证,我决定尝试使用filter_var函数来检查我的电子邮件地址的有效性.我不知道filter_var实际上允许在哪里(因为文档很简单),我发现它允许一个像test @ test这样的电子邮件地址.在域中是否必须有.com,.net等...

Art*_*cto 18

这种行为在四月左右发生了变化.请参阅错误#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.
Run Code Online (Sandbox Code Playgroud)

更新日志中提到的PHP 5.3.3和PHP 5.2.14这个Bug修正.

  • @Metropolis你可以从rev 297350获取RegEx模式并将其转换为自定义验证器函数,或者直接使用`FILTER_VALIDATE_REGEXP`. (2认同)

Que*_*tin 5

这是一个有效的电子邮件地址.它不会在互联网上工作(至少,不是今天),但它适用于本地地址.

我认为开发人员正在采取明智的方法来检查电子邮件地址,而不是建立自己的系统,一旦引入新的TLD,该系统就会保证过时.我们有足够的电子邮件地址语法检查程序拒绝foo@example.museum它.