繁体   English   中英

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

[英]Why doesn't my email regex for PHP work?

我在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";

PHP随附的过滤器:

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

echo "E-mail is not valid";

} else {

echo "E-mail is valid";

}

使用preg_match,而不是ereg。 ereg regex字符串不使用斜杠字符。

另外,PHP中的单引号字符串中可能不需要双反斜杠(尽管不确定)

我使用以下内容。 在比较之前,我还将在输入字符串上运行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;
  }
}

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

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

随着人们增强其验证器,我将尝试使此页面保持最新。 感谢Cal,Dave和Phil在汇编这些测试和对我自己的验证程序的建设性批评方面所提供的帮助和合作。

人们应该特别注意针对RFC 3696勘误表 实际上,其中三个规范示例是无效地址。 地址的最大长度为254或256个字符, 而不是 320。

可能是由于要使用符号连接表达式(+)。

无论如何,您应该尝试以下一种方法:

\\ w +([[-+。'] \\ w +) @ \\ w +([-。] \\ w +) 。\\ w +([-。] \\ w +)*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM