Фильтровать файлы, когда их расширение соответствует шаблону регулярного выражения

В Plupload мы можем ограничить типы файлов (скажем, архивный файл), установив filters, как показано ниже.

// Specify what files to browse for
filters : [
       {title : "Zip files", extensions : "zip,avi"}
    ],

У меня есть список файлов (например, X.A1, Y.A2, Z.A3, ...), в которых расширение может варьироваться от A1 до AN (где N — целое число).

Я хотел бы отфильтровать все файлы с расширением, которое начинается с A и за которым следует целое число. Что-то типа

filters : [
           {title : "Start With A", extensions : "A\\d+"}
        ],

Я пытался использовать фильтр как таковой

filters : [
           {title : "Start With A", extensions : "A1,A2,A3,A4"}
        ],

но я не знаю, сколько у нас может быть расширений.

Есть ли способ использовать регулярные выражения для фильтрации выбранных файлов?


person RameshPasa    schedule 25.05.2016    source источник


Ответы (1)


У вас есть два варианта:

  1. Вам просто нужно создать строку расширений, которые вы хотите разрешить. Для создания такой строки достаточно простого цикла for.

    Используя это решение, вы устанавливаете правильные разрешенные расширения.

  2. Вы разрешаете пользователю выбирать любое расширение файла, но после того, как файл выбран, вы проверяете, соответствует ли расширение вашим требованиям. Если это так, добавьте файл в очередь загрузки. Если это не так, выдайте пользователю ошибку.

Опция 1:

var extensions = '', i;

for (i = 1; i < 30; i++) {
    extensions += 'A' + i + ',';
}
extensions = extensions.slice(0, -1);

var uploader = new plupload.Uploader({
    // (....)

    filters : {
        max_file_size : '10mb',
        mime_types: [
            {title : "Custom files", extensions: extensions}
        ]
    },
    
    // (....)

Вариант 2:

var uploader = new plupload.Uploader({
    // (....)

    init: {
        FilesAdded: function(up, files) {
            // Foreach file
            plupload.each(files, function(file) {
                // Get the file extension
                var fileExtension = file.name.split('.').pop();
                // Create the pattern
                var pattern = new RegExp("^A\d$");

                // If the pattern doesn't match, don't allow the file.
                if (!pattern.test(fileExtension)) {
                    console.log('not added');
                    return false;
                }

                console.log('added');
                document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
            });
        },
        
    // (....)
person Luís Cruz    schedule 29.05.2016
comment
Невозможно попробовать вариант 1, так как мы не знаем, сколько расширений будет там. Что касается варианта 2, мы выполнили эту проверку, но ищем файл фильтрации, когда отображается файловый браузер. Мы смогли сделать это в браузере Chrome, но не в IE и FF. - person RameshPasa; 01.06.2016