0

呃,它坏了:

我有一个完美工作的正则表达式,它允许所有数字、字母和仅与电子邮件相关的标点符号 (._-@) 来清理我的电子邮件字段,然后我认为添加一个正确的电子邮件正则表达式会很好,检查是否正确图案。这就是我现在所拥有的:

function check_chars_email($str) {
$str_replace = preg_replace("/[^a-zA-Z0-9-@_\.]/","",$str);
if(preg_match("/^(.*)@(.*)\.(.*)$/", $str_replace)) {
return $str_replace;
} else {
return FALSE;
}

我知道我不需要 .* 周围的括号,但发现它使它更清晰。

当我调用该函数时,它是这样的:

$esc_email = mysqli_real_escape_string($mysqli, check_chars_email($_POST["email"]));
$tr_email = trim($esc_email);
$_SESSION["email"] = $tr_email;

然后,我在注册脚本开始时使用它来验证它:

($tr_email === 假)

尽管尝试使用有效的电子邮件地址,但我还是失败了。我也在测试变量是否为空,所以我想我可以尝试 ==FALSE 而不是 ===,但我想尽可能精确。

有人有什么想法吗?

4

2 回答 2

2

当 PHP 已经这样做时,为什么要为此使用正则表达式?

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  // it's valid
}

查看filter_var()验证过滤器

于 2009-09-26T02:37:46.780 回答