如何将 PHP 的 eregi 更改为 preg_match

2022-08-30 20:36:52

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

我需要帮助,下面是一个非常基本的小正则表达式来验证电子邮件,我确实意识到它不是最大的工作,但对于我的需求来说,它现在是可以的。

它目前使用PHP的ergi函数,php.net 说现在是一个贬值的函数,我应该使用preg_match代替,简单地用preg_match替换eri不起作用,有人可以告诉我如何使它工作吗?

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

答案 1

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

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


答案 2

你需要改变三件事

  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"

推荐