【问题标题】:Validating email addresses验证电子邮件地址
【发布时间】:2012-11-08 19:07:02
【问题描述】:

我正在回顾一个项目并整理一些验证位,通常我会使用正则表达式检查来验证电子邮件是否正确,然后我遇到了:http://de2.php.net/manual/en/function.filter-var.php

现在我已经尝试了几个测试,但没有得到预期的结果。

$email_b = 'bog^us@gmail.com';
var_dump(filter_var($email_b, FILTER_SANITIZE_EMAIL));

返回:

string(16) "bog^us@gmail.com" 

但对我来说,这没有经过消毒,然后当我尝试时

if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
    echo "This (email_b) email address is considered valid.";
}

我要再说一遍,这不是一个有效的电子邮件地址。

我错过了什么吗?

【问题讨论】:

  • 不是你,但根据 RFC,这些字符是有效的。
  • 你在使用哪个版本的 PHP?
  • "^" 是电子邮件地址的有效字符(请参阅 en.wikipedia.org/wiki/Email_address#Valid_email_addresses 或相应的 RFC)
  • 好吧,我不知道所有这些都是有效的电子邮件地址 :) doh。谢谢大家,猜猜这是 RTFM 的情况。

标签: php validation


【解决方案1】:

是的,你错过了一些东西。 bog^us@gmail.com 是一个有效的电子邮件地址,因此您的测试返回了正确的结果。请参阅这篇文章,快速了解电子邮件地址中的有效字符。

http://en.wikipedia.org/wiki/Email_address

在电子邮件地址的本地部分(@ 之前的位)中,以下字符是合法的:-

  • 大写和小写英文字母(a-z、A-Z)(ASCII:65-90、97-122)
  • 数字 0 到 9(ASCII:48–57)
  • 字符 !#$%&'*+-/=?^_`{|}~ (ASCII: 33, 35–39, 42, 43, 45, 47, 61, 63, 94–96, 123– 126)

加上链接文章中详述的其他一些限制。

本文提供了一些无效地址示例,供您在测试中使用。如:-

  • Abc.example.com(@ 字符必须分隔本地和域部分)
  • Abc.@example.com(字符点(.)在本地部分最后)
  • Abc..123@example.com(字符点(.)是双)

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 2018-03-13
    • 2011-09-02
    • 2013-02-20
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2015-09-09
    相关资源
    最近更新 更多