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

Nik*_*ike 0 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢!

Nik*_*kiC 8

您应该通过以下方式使用过滤器扩展filter_var:

filter_var($email, FILTER_VALIDATE_EMAIL);
Run Code Online (Sandbox Code Playgroud)

如果您想要正则表达式,请不要使用严格的规则,否则我的+@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);
Run Code Online (Sandbox Code Playgroud)