5

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

我的联系表格可以正常工作,但我不断收到以下错误:

已弃用:函数 ereg() 在 /home/..... 中已弃用

我真的迷路了,但我认为这是需要调整的部分。

    if ( empty($_REQUEST['name']) ) {
    $pass = 1;
    $alert .= $emptyname;
} elseif ( ereg( "[][{}()*+?.\\^$|]", $_REQUEST['name'] ) ) {    
    $pass = 1;
    $alert .= $alertname;
}
if ( empty($_REQUEST['email']) ) {
    $pass = 1;
    $alert .= $emptyemail;
} elseif ( !eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]   {2,3})$", $_REQUEST['email']) ) {
    $pass = 1;
    $alert .= $alertemail;
}
if ( empty($_REQUEST['message']) ) {
    $pass = 1;
    $alert .= $emptymessage;
} elseif ( preg_match( "[][{}()*+?\\^$|]", $_REQUEST['message'] ) ) {
    $pass = 1;
    $alert .= $alertmessage;
}

将不胜感激找到解决方案

4

3 回答 3

41

您必须使用preg_match,而不是ereg因为最后一个已弃用。

更换它不是什么大不了的事:

ereg( "[][{}()*+?.\\^$|]", $_REQUEST['name'] )

会变成:

preg_match( "/[][{}()*+?.\\^$|]/", $_REQUEST['name'] )

ps 在将旧项目移植到 PHP 5.3 时,我不得不修改一百多个文件,以避免手动修改,我使用以下脚本为我做这件事:

function replaceEregWithPregMatch($path) {
    $content = file_get_contents($path);
    $content = preg_replace('/ereg\(("|\')(.+)(\"|\'),/',
                            "preg_match('/$2/',",
                            $content);
    file_put_contents($path, $content);
}

我希望它有所帮助。

于 2012-11-27T09:18:52.967 回答
3

该功能ereg()已弃用,不应再使用。该文档告诉您该怎么做(改为使用preg_match)。

于 2012-11-27T09:17:02.157 回答
0

就像你说的 - 没什么大不了的,它就像一个魅力:

if ( empty($_REQUEST['name']) ) {
    $pass = 1;
    $alert .= $emptyname;
} elseif ( preg_match( "/[][{}()*+?.\\^$|]/", $_REQUEST['name'] ) ) {  
    $pass = 1;
    $alert .= $alertname;
}
if ( empty($_REQUEST['email']) ) {
    $pass = 1;
    $alert .= $emptyemail;
} elseif ( !preg_match("#^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$#i", $_REQUEST['email']) ) {
    $pass = 1;
    $alert .= $alertemail;
}
if ( empty($_REQUEST['message']) ) {
    $pass = 1;
    $alert .= $emptymessage;
} elseif ( preg_match( "/[][{}()*+?\\^$|]/", $_REQUEST['message'] ) ) {
    $pass = 1;
    $alert .= $alertmessage;
}

谢谢你们

于 2012-11-27T09:46:07.450 回答