20

可能重复:
如何在 PHP 中将 ereg 表达式转换为 preg?

我需要帮助,下面是一个很小的非常基本的正则表达式,可以在一定程度上验证电子邮件,我确实意识到它的效果不是最好的,但就我的需要而言,现在还可以。

它目前使用 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';
    }
}
4

2 回答 2

32

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';
    }
}

您最初的尝试不起作用的原因是因为它试图^用作分隔符,但(显然)没有找到匹配^正则表达式结尾的匹配项。

于 2009-09-03T17:45:07.813 回答
10

你需要改变三件事

  1. 需要添加模式分隔符(可以是任何字符,但最常见的是正斜杠)
  2. [[:alnum:]] 将需要替换为 PCRE 等效项
  3. “eregi”中的“i”表示不区分大小写,PCRE 使用标志,特别是i标志。

否则,其余部分看起来与 PCRE 兼容(是的,这有点多余 =P)

"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i"
于 2009-09-03T17:49:16.290 回答