jQuery найти расширение файла (из строки) - PullRequest
29 голосов
/ 15 июня 2010

Мне было интересно, можно ли jQuery найти расширение файла на основе возвращаемой строки?

Имя файла (строка) будет передано функции (openFile), и я хотел, чтобы эта функция выполняларазличные вещи, основанные на том, через какой файл был передан, это могут быть файлы изображений или pdf-файлы.

function openFile(file) { 

  //if .jpg/.gif/.png do something

  //if .zip/.rar do something else

  //if .pdf do something else

};

Я искал что-то, что найдет расширение файла, но не могу найтичто-нибудь.

Ответы [ 8 ]

78 голосов
/ 15 июня 2010

Примерно так.

Проверьте пример в реальном времени: http://jsfiddle.net/6hBZU/1/

Предполагается, что строка всегда заканчивается расширением:

function openFile(file) {
    var extension = file.substr( (file.lastIndexOf('.') +1) );
    switch(extension) {
        case 'jpg':
        case 'png':
        case 'gif':
            alert('was jpg png gif');  // There's was a typo in the example where
        break;                         // the alert ended with pdf instead of gif.
        case 'zip':
        case 'rar':
            alert('was zip rar');
        break;
        case 'pdf':
            alert('was pdf');
        break;
        default:
            alert('who knows');
    }
};

openFile("somestring.png");

РЕДАКТИРОВАТЬ : Я ошибочно удалил часть строки в openFile("somestring.png");.Исправленный.Впрочем, если бы это было в Живом Примере.

70 голосов
/ 15 июня 2010

Чтобы получить расширение файла, я бы сделал это:

var ext = file.split('.').pop();
12 голосов
/ 15 июня 2010

Еще один способ записать это:

function getExtension(filename) {
    return filename.split('.').pop().toLowerCase();
}

function openFile(file) { 
    switch(getExtension(file)) {
        //if .jpg/.gif/.png do something
        case 'jpg': case 'gif': case 'png':
            /* handle */
            break;
        //if .zip/.rar do something else
        case 'zip': case 'rar':
            /* handle */
            break;

        //if .pdf do something else
        case 'pdf':
            /* handle */
            break;
    }
}
9 голосов
/ 15 июня 2010

Вы можете использовать комбинацию подстроки и lastIndexOf

Sample

var fileName = "test.jpg";
var fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1); 
1 голос
/ 20 ноября 2014
var fileName = 'file.txt';

// Getting Extension

var ext = fileName.split('.')[1];

// OR

var ext = fileName.split('.').pop();
1 голос
/ 15 июня 2010

Попробуйте это:

var extension = fileString.substring(fileString.lastIndexOf('.') + 1);
1 голос
/ 15 июня 2010

Поскольку расширение всегда будет строкой после точки в полном / частичном имени файла, просто используйте встроенную функцию разбиения в js и проверьте полученное расширение на предмет того, что вы хотите, чтобы оно делало. Если split возвращает только один кусок / нет частей, он не содержит расширения.

0 голосов
/ 14 мая 2018

Другой способ (который позволяет избежать расширенных операторов регистра) - определить массивы расширений файлов для аналогичной обработки и использовать функцию для проверки результата расширения по массиву (с комментариями):

// Define valid file extension arrays (according to your needs)
var _docExts = ["pdf", "doc", "docx", "odt"];
var _imgExts = ["jpg", "jpeg", "png", "gif", "ico"];
// Checks whether an extension is included in the array
function isExtension(ext, extnArray) {
    var result = false;
    var i;
    if (ext) {
        ext = ext.toLowerCase();
        for (i = 0; i < extnArray.length; i++) {
            if (extnArray[i].toLowerCase() === ext) {
                result = true;
                break;
            }
        }
    }
    return result;
}
// Test file name and extension
var testFileName = "example-filename.jpeg";
// Get the extension from the filename
var extn = testFileName.split('.').pop();
// boolean check if extensions are in parameter array
var isDoc = isExtension(extn, _docExts);
var isImg = isExtension(extn, _imgExts);
console.log("==> isDoc: " + isDoc + " => isImg: " + isImg);
// Process according to result: if(isDoc) { // .. etc }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...