我经常发现自己做这样的快速检查:
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的解决方案.
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)
为了获得良好的替代eregi()是preg_match()用i修改器:
if (! preg_match('/.php/i',$fileName))
$filename.='.php';
Run Code Online (Sandbox Code Playgroud)