如何将PHP eregi更改为preg_match

时间:2009-09-03 17:42:03

标签: php email pcre posix-ere

  

可能重复:
  How can I convert ereg expressions to preg in PHP?

我需要帮助,下面是一个有点验证电子邮件的小型非常基本的正则表达式,我确实认为它不是最好的,但是对于我的需求它现在还可以。

它目前使用PHP的 eregi函数,php.net认为它现在是折旧函数,我应该使用 preg_match 代替,简单地用preg_match替换erei不起作用,可以有人告诉我如何使它工作?

function validate_email($email) {
    if (!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
        echo 'bad email';
    } else {
        echo 'good email';
    }
}
function validate_email($email) {
    if (!preg_match("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) {
        echo 'bad email';
    } else {
        echo 'good email';
    }
}

2 个答案:

答案 0 :(得分:27)

Perl风格的正则表达式模式总是需要分隔。字符串中的第一个字符被视为分隔符,如下所示:

function validate_email($email) {
    if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", $email)) {
        echo 'bad email';
    } else {
        echo 'good email';
    }
}

您的初始尝试不起作用的原因是因为它尝试使用^作为分隔符,但(显然)在正则表达式结尾处找不到匹配的^

答案 1 :(得分:10)

你需要改变三件事

  1. 需要添加模式分隔符(可以是任何字符,但最常见的是正斜杠)
  2. [[:alnum:]]需要替换为PCRE等效项
  3. “eregi”中的“i”表示不区分大小写,PCRE使用标记,特别是i标记。
  4. 否则,其余部分看起来与PCRE兼容(是的,那是多余的= P)

    "/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i"