使用正则表达式检查 PHP 中的文件扩展名

2022-08-30 21:35:11

我正在读取单个目录中的所有文件,并且我想在JPG,JPEG,GIF和PNG上进行过滤。

大写字母和小写字母。这些是唯一被接受的文件。

我目前正在使用这个:

$testPics = takeFiles($picsDir, "([^\s]+(?=\.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF))\.\2)");

函数 takeFiles 如下所示:

function takerFiles($dir, $rex="") {
    $dir .= "/";
    $files = array();
    $dp = opendir($dir);
    while ($file = readdir($dp)) {
      if ($file == '.')  continue;
      if ($file == '..') continue;
      if (is_dir($file)) continue;
      if ($rex!="" && !preg_match($rex, $file)) continue;
      $files[] = $file;
    }
    closedir($dp);
    return $files;
  }

而且它总是不返回任何内容。所以我的正则表达式代码一定有问题。


答案 1

我认为您的正则表达式有问题。首先尝试在此处测试正则表达式:https://www.regexpal.com/

我认为这个可能对你有用:

/^.*\.(jpg|jpeg|png|gif)$/i

请注意末尾的 /i - 这是“不区分大小写”标志,省去了您必须键入所有排列:)


答案 2

不如改用 glob() 怎么样?

$files = glob($dir . '*.{jpg,gif,png,jpeg}',GLOB_BRACE);

推荐