代码之家  ›  专栏  ›  技术社区  ›  Ali

很好的替代php中的eregi()。

  •  12
  • Ali  · 技术社区  · 16 年前

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

    if (!eregi('.php', $fileName)) {
        $filename .= '.php';
    }
    

    但作为 eregi() 在php 5.3中被否决,代码现在抛出错误。

    是否有另一个函数与 Er() ?我对regexps一无所知,也不想学习,所以 preg_match() ETC不适合我。

    8 回复  |  直到 12 年前
        1
  •  23
  •   moff    16 年前

    stristr 实现与eRegi完全相同的结果(至少在不使用正则表达式的情况下):

    if (!stristr($fileName, '.php'))
        $filename.='.php';
    

    你也可以这样做一个“假”埃雷吉:

    if (!function_exists('eregi')) {
        function eregi($find, $str) {
            return stristr($str, $find);
        }
    }
    

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

        2
  •  19
  •   vartec    16 年前

    当然,你知道,这不符合你的期望吗? 在regexp中,“.”表示任何字符,因此 eregi('.php',$fileName) 表示文件名,任何字符后跟“php”。因此,例如“blabla2hp.txt”将与您的regexp匹配。

    现在你要做的是:

    $file_ext = pathinfo($filename, PATHINFO_EXTENSION);
    if(strtolower($file_ext) != 'php') 
       $filename .= '.php';
    
        3
  •  5
  •   M A Hossain Tonu    13 年前

    很好的替代方案 eregi() preg_match() 具有 i 修饰语:

    if (! preg_match('/.php/i',$fileName))
          $filename.='.php';
    
        4
  •  4
  •   Bilawal Hameed    12 年前

    试试这个,自从我最近更新到php 5之后,我已经用了很多。

    先前:

    if(eregi('-', $_GET['id'])
    {
       return true;
    }
    

    现在我正在使用这个-它也同样有效。

    if(preg_match('/(.+)-(.+)/', $_GET['id'])) {
    {
       return true;
    }
    

    只需用下面的代码替换代码,代码中不应该有任何差异。如果您想知道为什么php会删除eregi(),那是因为它在使用很多时候会出现性能问题,所以最好使用preg_match(),因为它在搜索方面更为具体,所以它有更好的性能和渲染时间。

    让我知道这对你有什么作用。

        5
  •  2
  •   Csaba Kétszeri    16 年前

    如果您选择“假”eregi,您将在假函数内触发一个通知: 触发_错误(“某些代码仍使用eregi”,e_用户注意); 这样您就可以很容易地捕捉到忘记的Eregi调用,并替换它们。

        6
  •  2
  •   matpie    16 年前

    也许您应该考虑重构您的代码来实现这一点:

    if (substr($fileName, -4, 4) !== '.php')
        $fileName .= '.php';
    

    如本问题其他答案所述, eregi('.php') 将搜索文件中后跟“php”anywere的任何内容(不仅仅是在末尾)。

        7
  •  1
  •   Jasper Bekkers    16 年前

    我通常为这类东西创建和结束函数,或者其他简单的字符串操作函数。

    function endsWith($string, $end){
        return substr($string, -strlen($end)) == $end;
    }
    
        8
  •  0
  •   Charles Zhang    13 年前

    如果(!)stristr($filename,.php')) $filename.='.php';

    Moff的answser把参数倒过来了。

    http://php.net/manual/en/function.stristr.php