2010-11-12 84 views
18

我想檢查上傳文件的類型。如果名稱像example.txt,我只想得到.txt部分。我怎樣才能實現它使用JQuery或JavaScript。如何使用jQuery或JavaScript獲取文件的擴展名?

任何建議或鏈接將欣賞!

+4

文件的* name *可能會告訴你**沒有任何**關於它實際包含的內容。 – Pointy 2010-11-12 13:10:54

+0

看看這個http://stackoverflow.com/questions/1818310/regular-expression-to-remove-a-files-extension – ArK 2010-11-12 13:13:05

+0

@Pointy:它是什麼?我無法理解。你在說安全威脅嗎? – 2010-11-12 15:51:01

回答

45

一個簡單的解決方案是.split().pop()拿到最後一個字符串數組中,像這樣:

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

這將讓您剛纔"txt"沒有.,只是追加如果需要的話。這也適用於說:My.File.name.has.an extension.txt以及。如果它沒有有擴展名,它會返回文件名,所以你可能想要檢查這個...或者去一個完全不同的方向,並通過正則表達式來對照一組或已知的擴展來驗證。

+0

這就是我要找的感謝!!! – 2017-06-07 07:45:47

+0

當具有查詢字符串參數時,腳本將無法正常工作,例如'/example/image.jpg?a = b&b = 2',爲了處理它,我增加了一個分割'file.split(「?」)[0] .split('。')。pop()'(注意:很多時候系統使用查詢字符串來防止在需要時緩存) – 2017-11-20 10:28:53

2
var text = 'example.txt', 
    ext = text.split('.')[1]; 
+0

您可能希望至少使該語法有效。 *編輯*:你走了。 – 2010-11-12 13:10:37

+0

哈哈對不起,快速鍵盤上 – tbleckert 2010-11-12 13:12:51

1

用整個文件名拆分。作爲分隔符。分割將分割的項目存儲在數組中。獲取數組的最後一個元素。

8

使用lastIndexOf()substr()

function getFileExtension(name) 
{ 
    int found = name.lastIndexOf('.') + 1; 
    return (found > 0 ? name.substr(found) : ""); 
} 

注意,此實現返回一個空字符串,如果文件名不包含任何句點字符(即沒有擴展名)。在這種情況下,基於split()的實現有時會返回完整的文件名。

1
if((document.form1.upload.value.lastIndexOf(".jpg")==-1) { 
    alert("Please upload only .jpg extention file"); 
    return false; 
} 

lastIndexOf將返回最後一次出現的指定搜索參數的索引。如果沒有找到,-1將返回

7

如果您需要驗證多個擴展名:

var filename = "picture.jpg"; 
var valid_extensions = /(\.jpg|\.jpeg|\.gif)$/i; 
if(valid_extensions.test(filename)) 
{ 
    alert('OK'); 
} 
else 
{ 
    alert('Invalid File'); 
} 

這樣就不再需要,如果你想查詢的擴展名,例如,上傳文件之前解析字符串。

+1

'foojpg'會匹配。您的正則表達式中的時間段需要被轉義。 – 2010-11-12 14:53:36

+0

-1:解決評論並修復答案。 – ANeves 2011-12-14 19:51:21

0

Frédéric的回答對我很好,但是,該功能在Chrome控制檯中出現「意外標識符」錯誤。 「int」是問題,並且此修改工作。

function getFileExtension(name){ 
    var found = name.lastIndexOf('.') + 1; 
    return (parseInt(found) > 0 ? name.substr(found) : ""); 
} 
相關問題