2010-06-15 5 views
27

Ich frage mich, ob es für jQuery möglich war, eine Dateierweiterung basierend auf einer zurückgegebenen Zeichenfolge zu finden?jQuery Suche Dateierweiterung (aus Zeichenfolge)

Ein Dateiname (string) wird an eine Funktion übergeben (openFile) und ich wollte diese Funktion verschiedene Dinge auf der Grundlage, welche Datei durchlaufen wurde, könnte es Bilddateien oder PDF-Dateien sein.

function openFile(file) { 

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

    //if .zip/.rar do something else 

    //if .pdf do something else 

}; 

Ich habe nach etwas suchen, das die Dateierweiterung finden, aber ich kann nichts zu finden scheinen.

+2

Dank Jeder für Ihre Hilfe! :) – SoulieBaby

Antwort

69

Wie wäre es so etwas wie dieses.

testen anschauliches Beispiel:http://jsfiddle.net/6hBZU/1/

Er geht davon aus, dass die Zeichenfolge immer mit der Erweiterung enden wird:

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"); 

EDIT: Ich Teil der Zeichenfolge in openFile("somestring.png"); versehentlich gelöscht. Korrigiert. Hatte es aber im Live-Beispiel.

+3

Haha, ich habe fast einen Kommentar hinterlassen, dann dachte ich Hmm ... vielleicht verstehe ich etwas nicht. +1 große Antwort –

+0

dieser Weg wird nicht funktionieren, wenn die Datei keine Erweiterung hat. wie Ordner/Datei ohne Extension –

+0

so ist das schneller als '.split ('.'). pop();' was ist unten veröffentlicht? – cantsay

1

Da die Erweiterung immer die Zeichenfolge nach einem Punkt in einem vollständigen/partiellen Dateinamen ist, verwenden Sie einfach die integrierte Split-Funktion in js und testen Sie die resultierende Erweiterung für was Sie tun sollen. Wenn Split nur ein Stück/keine Stücke zurückgibt, enthält es keine Erweiterung.

8

Sie können eine Kombination von substring verwenden und lastIndexOf

Probe

var fileName = "test.jpg"; 
var fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1); 
1

Try this:

var extension = fileString.substring(fileString.lastIndexOf('.') + 1); 
63

die Dateierweiterung zu erhalten, würde ich dies tun:

var ext = file.split('.').pop(); 
+4

+1 - Viel schönere Art, die Erweiterung zu erhalten. Ich wünschte, ich hätte daran gedacht! – user113716

+0

sehr gehoben, in der Tat. –

+0

kleinen klaren Code :) upvoted –

11

noch eine andere Möglichkeit, es zu schreiben:

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; 
    } 
} 
+0

+1 für das Hinzufügen von '.toLowerCase()'. Könnte wichtig sein. – user113716

1
var fileName = 'file.txt'; 

// Getting Extension 

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

// OR 

var ext = fileName.split('.').pop();