php正则表达式太严格了

时间:2009-11-27 10:07:43

标签: php

只是想知道为什么这么严格,我可以发送非常简单的电子邮件说tim@yahoo.com或者@@google.com

但如果我再发邮件(sacagawea@gmail.com),则不会发送。

相反,它回复了我的错误消息:提供的电子邮件地址无效

    // Create a function to check email 
function checkEmail($email)
{
// Add some regex 
  return preg_match('/^\S+@[\w\d.-]{2,}\.[\w]{2,6}$/iU', $email) ? TRUE : FALSE;
}

4 个答案:

答案 0 :(得分:3)

如果您可以访问php 5.2或更高版本,则应使用filter函数:

function checkEmail($email){
  return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

或验证它,“the right way”。

答案 1 :(得分:2)

这部分

@[\w\d.-]{2,}

正在吞噬

@gmail.com

不为此部分留下任何内容

[\w\d.-]{2,}

匹配。

最好重复使用已经过验证的内容,例如参见http://www.regular-expressions.info/email.html

答案 2 :(得分:1)

我通常不会为检查电子邮件的有效性而烦恼。我只需要检查“@”前面和后面是否有值。就这样。剩下的“检查”工作,MTA将为我做这件事。如果它的电子邮件无效,我将收到MTA的回复。如果能够发送出去,这意味着该电子邮件很可能是有效的。

答案 3 :(得分:0)

请尝试

'/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/'

它也适用于子域名电子邮件地址email@sub.domain.tl