Как я могу получить расширения файлов с помощью JavaScript? - PullRequest
421 голосов
/ 10 октября 2008

См. Код:

var file1 = "50.xsl";
var file2 = "30.doc";
getFileExtension(file1); //returns xsl
getFileExtension(file2); //returns doc

function getFileExtension(filename) {
    /*TODO*/
}

Ответы [ 33 ]

4 голосов
/ 04 октября 2013

Я просто хотел поделиться этим.

fileName.slice(fileName.lastIndexOf('.'))

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

   function getExtention(fileName){
     var i = fileName.lastIndexOf('.');
     if(i === -1 ) return false;
     return fileName.slice(i)
   }
4 голосов
/ 12 мая 2011

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

function getFileExtension(filename) {
  var fileinput = document.getElementById(filename);
  if (!fileinput)
    return "";
  var filename = fileinput.value;
  if (filename.length == 0)
    return "";
  var dot = filename.lastIndexOf(".");
  if (dot == -1)
    return "";
  var extension = filename.substr(dot, filename.length);
  return extension;
}
3 голосов
/ 07 апреля 2011

Для большинства приложений используется простой скрипт, такой как

return /[^.]+$/.exec(filename);

будет работать нормально (как предоставлено Томом). Однако это не дурак. Не работает, если указано следующее имя файла:

image.jpg?foo=bar

Это может быть немного излишним, но я бы предложил использовать URL-анализатор, такой как этот , чтобы избежать сбоев из-за непредсказуемых имен файлов.

Используя эту конкретную функцию, вы можете получить имя файла следующим образом:

var trueFileName = parse_url('image.jpg?foo=bar').file;

Это выведет "image.jpg" без URL-адресов. Тогда вы можете получить расширение файла.

3 голосов
/ 16 января 2009
function func() {
  var val = document.frm.filename.value;
  var arr = val.split(".");
  alert(arr[arr.length - 1]);
  var arr1 = val.split("\\");
  alert(arr1[arr1.length - 2]);
  if (arr[1] == "gif" || arr[1] == "bmp" || arr[1] == "jpeg") {
    alert("this is an image file ");
  } else {
    alert("this is not an image file");
  }
}
3 голосов
/ 11 октября 2008
function extension(fname) {
  var pos = fname.lastIndexOf(".");
  var strlen = fname.length;
  if (pos != -1 && strlen != pos + 1) {
    var ext = fname.split(".");
    var len = ext.length;
    var extension = ext[len - 1].toLowerCase();
  } else {
    extension = "No extension found";
  }
  return extension;
}

// использование

расширение ( 'file.jpeg')

всегда возвращает расширение ниже, так что вы можете проверить его при смене поля работает для:

file.JpEg

файл (без расширения)

файл. (Noextension)

3 голосов
/ 10 октября 2008

Я только что понял, что недостаточно комментировать ответ p4bl0, хотя ответ Тома ясно решает проблему:

return filename.replace(/^.*?\.([a-zA-Z0-9]+)$/, "$1");
3 голосов
/ 03 декабря 2018

// 获取文件后缀名
function getFileExtension(file) {
  var regexp = /\.([0-9a-z]+)(?:[\?#]|$)/i;
  var extension = file.match(regexp);
  return extension && extension[1];
}

console.log(getFileExtension("https://www.example.com:8080/path/name/foo"));
console.log(getFileExtension("https://www.example.com:8080/path/name/foo.BAR"));
console.log(getFileExtension("https://www.example.com:8080/path/name/.quz/foo.bar?key=value#fragment"));
console.log(getFileExtension("https://www.example.com:8080/path/name/.quz.bar?key=value#fragment"));
3 голосов
/ 10 октября 2008
return filename.replace(/\.([a-zA-Z0-9]+)$/, "$1");

edit: Странно (а может и нет) $1 во втором аргументе метода замены, похоже, не работает ... Извините.

3 голосов
/ 04 июля 2015

Я много лун опаздываю на вечеринку, но для простоты я использую нечто подобное

var fileName = "I.Am.FileName.docx";
var nameLen = fileName.length;
var lastDotPos = fileName.lastIndexOf(".");
var fileNameSub = false;
if(lastDotPos === -1)
{
    fileNameSub = false;
}
else
{
    //Remove +1 if you want the "." left too
    fileNameSub = fileName.substr(lastDotPos + 1, nameLen);
}
document.getElementById("showInMe").innerHTML = fileNameSub;
<div id="showInMe"></div>
3 голосов
/ 25 августа 2014

Если вы ищете конкретное расширение и знаете его длину, вы можете использовать substr :

var file1 = "50.xsl";

if (file1.substr(-4) == '.xsl') {
  // do something
}

Ссылка JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr

...