如何将PHP的eregi更改为preg_match

Jas*_*vis 18 php email pcre posix-ere

可能重复:
如何在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';
    }
}
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 28

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';
    }
}
Run Code Online (Sandbox Code Playgroud)

你的初始尝试不起作用的原因是因为它试图^用作分隔符,但(显然)发现^正则表达式的结尾没有匹配.

  • @jasondavis,`FILTER_VALIDATE_EMAIL`肯定是更好的选择.电子邮件**很复杂**. (2认同)

Pet*_*ley 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"
Run Code Online (Sandbox Code Playgroud)