PHP - preg_match()和eregi()不工作?

时间:2010-09-01 14:03:27

标签: php regex preg-match

我尝试使用preg_match验证电子邮件地址时遇到了一些问题(如果更合适,则使用eregi())。我现在尝试了几种正则表达式模式,无论我做什么它似乎都不起作用。

这是功能:

function validateEmail($email) {

    if(eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)){
        return true;
    }

}

任何想法有什么不对?我已经尝试在eregi(以及之前使用过的preg_match)之前加上一个感叹号,并且反过来(正如预期的那样),但仍然没有使它按预期工作。如果它没有通过正则表达式,我希望它返回TRUE。

我在preg_match函数上没有使用相同的正则表达式,然后我发现了另一个,因为我知道你不能真正混合这两个。正确?

提前致谢!

2 个答案:

答案 0 :(得分:8)

您应该通过filter_var使用过滤器扩展程序:

filter_var($email, FILTER_VALIDATE_EMAIL);

如果您需要正则表达式,请不要使用严格的规则,否则我的+@example.org域名将被拒绝。使用类似~[^@]+@(?:[^.]+\.)+[A-Za-z]{2,6}~的内容。虽然这仍然不允许有效的电子邮件,例如"\@"@example.org

PS:如果你想知道为什么你的正则表达式不起作用:

  • eregi已弃用,请改用preg_match
  • []内不写||。只需使用[a-z0-9]即可。 ||只会另外允许|字符
  • 你到处都忘记了+量词。知道每个部分可能只有一个角色。

修复所有这些问题(但请不要使用此正则表达式!):

preg_match('~[a-z0-9]+@[a-z0-9]+.[a-z]+~i', $email);

答案 1 :(得分:2)

为了澄清一些内容,ereg已弃用。

要将其转换为preg_match,它将是:

if(preg_match('/[a-z||0-9]@[a-z||0-9].[a-z]/', $email)){

大多数(我松散地使用这个术语)ereg只需要添加分隔符(第一个和最后一个)以转换为preg_match