php数组值到正则表达式模式

rqenqsqc  于 2023-05-21  发布在  PHP
关注(0)|答案(3)|浏览(99)

所以我有一个数组的值,这种情况下,文件扩展名,但我使用preg_match过滤掉不允许的文件扩展名。
有没有简单的方法将数组转换为正则表达式模式?
源阵列

(
  [1] => 'file-to-path/thumbs/allowedfile.pdf',
  [2] => 'file-to-path/thumbs/notallowedfile.psd',
  [3] => 'file-to-path/project/test/notallowedfile.txt',
)

允许的扩展名数组

( 
    [0] => bmp
    [1] => jpg
    [2] => jpeg
    [3] => gif
    ...
)

我现在使用的代码。

foreach($array as $key => $val){

     if( !preg_match('/^.*\.(jpg|png|jpeg|bmp|gif|pdf)$/i', $val ) ){

           // this part needs to be an array
           '/^.*\.(jpg|png|jpeg|bmp|gif|pdf)$/i' -> [array with the values]

      }

}
jpfvwuh4

jpfvwuh41#

我会避免使用正则表达式,而使用pathinfo($value, PATHINFO_EXTENSION)in_array()
例如,它填充$error数组并筛选数组。

<?php
$allowed_ext = array ( 
    'bmp',
    'jpg',
    'jpeg',
    'gif',
    'pdf'
);

$files = array(
  1 => 'file-to-path/thumbs/allowedfile.pdf',
  2 => 'file-to-path/thumbs/notallowedfile.psd',
  3 => 'file-to-path/project/test/notallowedfile.txt'
);

$errors = [];

foreach ($files as $key => $value) {
    if (!in_array(pathinfo($value, PATHINFO_EXTENSION), $allowed_ext)) {
        $errors[] = basename($value).' is not allowed.';
        unset($arr[$key]);
    }
}

print_r($errors);
print_r($files);

https://3v4l.org/oSOJT

结果:

Array
(
    [0] => notallowedfile.psd is not allowed.
    [1] => notallowedfile.txt is not allowed.
)
Array
(
    [1] => file-to-path/thumbs/allowedfile.pdf
)

如果你只是想过滤数组,那么你可以使用array_filter()

$files = array_filter($files, function ($file) use ($allowed_ext) {
   return in_array(pathinfo($file, PATHINFO_EXTENSION), $allowed_ext);
});
gzszwxb4

gzszwxb42#

你可以使用array_filter函数,然后在可用扩展名列表中检查单个文件的扩展名,如果它是有效的扩展名,则返回true,否则返回false,它是排除的。

$validFiles = array_filter($files, function ($file) use ($key, $value, arrOfValidExtensions) {
   $fileExtenstion = getFileExtension($value); //Implement this function to return the file extension
   return in_array($fileExtension, $arrOfValidExtensions);
});
41zrol4v

41zrol4v3#

所有不允许的文件,您可以快速忽略它们,同时使用最少的CPU

function check(){
    $who = array(
        1 => 'file-to-path/thumbs/allowedfile.pdf',
        2 => 'file-to-path/thumbs/notallowedfile.psd',
        3 => 'file-to-path/project/test/notallowedfile.txt'
    );
    return preg_grep('/^.*\.(jpg|png|jpeg|bmp|gif|pdf)$/i', $who );
}

print_r(check());

在我的浏览器中,我得到了这个push运行代码段:

Array
(
    [1] => file-to-path/thumbs/allowedfile.pdf
)

function check($who){
    return preg_grep('/^.*\.(jpg|png|jpeg|bmp|gif|pdf)$/i', $who );
}

print_r(check(array(
  1 => 'file-to-path/thumbs/allowedfile.pdf',
  2 => 'file-to-path/thumbs/notallowedfile.psd',
  3 => 'file-to-path/project/test/notallowedfile.txt'
)));

相关问题