PHP中eregi()的良好替代品

Cli*_*ote 12 php string

我经常发现自己做这样的快速检查:

if (!eregi('.php', $fileName)) {
    $filename .= '.php';
}
Run Code Online (Sandbox Code Playgroud)

但正如eregi()在PHP 5.3中弃用的那样,代码现在会抛出错误.

还有其他功能的行为完全相同eregi()吗?我对regexp一无所知,也不想学习,所以preg_match()等等对我不起作用.

mof*_*off 24

stristr实现与eregi完全相同的结果(至少在你不使用正则表达式时):

if (!stristr($fileName, '.php'))
    $filename.='.php';
Run Code Online (Sandbox Code Playgroud)

你也可以这样做一个"假的"eregi:

if (!function_exists('eregi')) {
    function eregi($find, $str) {
        return stristr($str, $find);
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:请注意,stristr不接受正则表达式eregi,对于这种特定情况(检查扩展名),最好使用vartec的解决方案.

  • 好吧,eregi也不区分大小写:) (2认同)

var*_*tec 19

当然你知道,这不符合你的期望吗?在正则表达式'.' 表示任何字符,因此eregi('.php',$fileName)表示带有任何字符的文件名,后跟'php'.因此,例如"blabla2PHP.txt"将匹配您的正则表达式.

现在你要做的是:

$file_ext = pathinfo($filename, PATHINFO_EXTENSION);
if(strtolower($file_ext) != 'php') 
   $filename .= '.php';
Run Code Online (Sandbox Code Playgroud)


M A*_*onu 5

为了获得良好的替代eregi()preg_match()i修改器:

if (! preg_match('/.php/i',$fileName))
      $filename.='.php';
Run Code Online (Sandbox Code Playgroud)