为什么我的PHP电子邮件正则表达不起作用?

时间:2009-01-21 16:02:25

标签: php regex

我在Javascript中有相同的表达式,但在PHP中无法用于服务器端验证。这是代码

if (ereg('/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\\.([a-zA-Z])+([a-zA-Z])+/',$_POST['email-address']))
    echo "valid email";
else
    echo "invalid email";

6 个答案:

答案 0 :(得分:9)

PHP附带的

过滤器:

if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {

echo "E-mail is not valid";

} else {

echo "E-mail is valid";

}

答案 1 :(得分:7)

答案 2 :(得分:4)

使用preg_match,而不是ereg。 ereg正则表达式字符串不使用带有斜杠的字符。

在PHP中的单引号字符串中也可能不需要双反斜杠(但不确定)

答案 3 :(得分:3)

我使用以下内容。在比较它之前,我还会在输入字符串上运行TRIM():

function is_email($string) {
  if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$string)) {
    return true;
  } else {
    return false;
  }
}

答案 4 :(得分:2)

我现在整理了来自Cal Henderson,Dave Child,Phil Haack,Doug Lovell和RFC 3696的测试用例。总共有158个测试地址。

我针对我能找到的所有验证器运行了所有这些测试。比较如下:http://www.dominicsayers.com/isemail

我会尝试让这个页面保持最新状态,因为人们会增强验证器。感谢Cal,Dave和Phil在编写这些测试和my own validator的建设性批评方面提供的帮助和合作。

人们应该特别注意errata against RFC 3696。其中三个规范示例实际上是无效地址。并且地址的最大长度为254或256个字符, 320。

答案 5 :(得分:-1)

可能是因为你用来连接表达式(+)的符号。

无论如何你应该尝试这个:

\ W +([ - +'] \ W +)的 @ \ W +([ - ] \ W +) \ W +([ - ] \ W +)。*