【问题标题】:FILTER_VALIDATE_EMAIL not validating [closed]FILTER_VALIDATE_EMAIL 未验证 [关闭]
【发布时间】:2012-11-01 04:02:42
【问题描述】:

这是我正在使用的代码:

if (filter_var($desired_username, FILTER_VALIDATE_EMAIL) || ((strlen($desired_username)) > 32)) {
    $usernamevalidate=FALSE;
} else {
    $usernamevalidate=TRUE;
}

strlen 工作正常,但 filter_var 或 FILTER_VALIDATE_EMAIL 不是。不要让变量名欺骗您,“$desired_username”链接到电子邮件字段,但它不起作用。

我可以输入“test”而不是“test@test.com”甚至“test@test”,它仍然有效。我也尝试过preg_match 和其他方法,但都没有正确验证。

任何帮助将不胜感激。

【问题讨论】:

  • “我也试过 preg_match 和其他方法,但都没有正确验证。”向我们展示代码。
  • 如果您认为filter_var 失败 - 为什么不在没有其他功能的情况下重现该问题?只需删除 everything 并用var_dump(filter_var(...)); 留下一行,然后看看它会返回什么。隔离问题总是是个好主意,这就是调试的方式。

标签: php validation email


【解决方案1】:

几件事:

  • 您似乎混淆了用户名和电子邮件。许多电子邮件的长度超过 32 个字符。
  • 您已经了解了 filter_var 的反向工作原理。一封有效的电子邮件将使用您的代码设置$usernamevalidate=FALSE

你应该这样做:

if(filter_var($desired_username, FILTER_VALIDATE_EMAIL)) {
  $usernamevalidate=TRUE;
} else {
  $usernamevalidate=FALSE;
}

【讨论】:

  • 甚至$usernamevalidate = filter_var($desired_username, FILTER_VALIDATE_EMAIL);
  • 哇,我不敢相信我没有立即注意到这一点。几个小时以来,我一直在摸不着头脑,事情就是这么简单。谢谢。
猜你喜欢
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 2015-04-16
  • 2011-08-01
  • 1970-01-01
  • 2012-03-12
相关资源
最近更新 更多