我经常发现自己正在做这样的快速检查:
if (!eregi('.php', $fileName)) {
$filename .= '.php';
}
但是由于PHP {5.3}中不推荐使用eregi()
,因此代码现在会抛出错误。
是否有其他功能的行为与eregi()
完全相同?我对regexp一无所知,也不想学习,所以preg_match()
等对我不起作用。
答案 0 :(得分:24)
stristr获得与eregi完全相同的结果(至少在您不使用正则表达式时):
if (!stristr($fileName, '.php'))
$filename.='.php';
你也可以这样做一个“假的”eregi:
if (!function_exists('eregi')) {
function eregi($find, $str) {
return stristr($str, $find);
}
}
更新:请注意,stristr
不接受eregi
的正则表达式,对于此特定情况(检查扩展名),您最好使用vartec的解决方案。
答案 1 :(得分:19)
当然你知道,这不符合你的期望吗?
在正则表达式'。'表示任何字符,因此eregi('.php',$fileName)
表示带有任何字符后跟'php'的文件名。因此,例如“blabla2PHP.txt”将匹配您的正则表达式。
现在你要做的是:
$file_ext = pathinfo($filename, PATHINFO_EXTENSION);
if(strtolower($file_ext) != 'php')
$filename .= '.php';
答案 2 :(得分:5)
使用 eregi()
修饰符preg_match()
i
的替代方案:
if (! preg_match('/.php/i',$fileName))
$filename.='.php';
答案 3 :(得分:4)
试试这个,自从我最近更新到PHP 5以后,我已经使用了很多。
此前:
if(eregi('-', $_GET['id'])
{
return true;
}
现在我正在使用它 - 它的效果一样好。
if(preg_match('/(.+)-(.+)/', $_GET['id'])) {
{
return true;
}
只需用以下代码替换您的代码,您的代码中不应该有任何差异。如果你想知道PHP删除eregi()的原因是因为它在使用时遇到了很多性能问题,所以最好使用preg_match(),因为它在搜索时更具体,因此它具有更好的性能和渲染时间。
让我知道这对你有用。
答案 4 :(得分:2)
如果你选择“假”eregi,你会在假函数内触发通知: trigger_error('某些代码仍使用eregi',E_USER_NOTICE); 通过这种方式,您可以轻松捕获被遗忘的eregi电话,并可以替换它们。
答案 5 :(得分:2)
也许你应该考虑重构你的代码来代替:
if (substr($fileName, -4, 4) !== '.php')
$fileName .= '.php';
正如在这个问题的其他答案中所述,eregi('.php')
将在文件中搜索“php”ANYWERE后面的任何内容(不仅仅是在结尾处)。
答案 6 :(得分:1)
我通常创建和结束功能;或其他简单的字符串操作函数。
function endsWith($string, $end){
return substr($string, -strlen($end)) == $end;
}
答案 7 :(得分:0)
if(!stristr($ fileName,'。php')) $文件名= '的php。';
moff的回答者有倒退的参数。