如何使用jQuery或JavaScript获取文件的扩展名?

问题描述:

我想检查上传文件的类型。如果名称像example.txt,我只想得到.txt部分。我怎样才能实现它使用JQuery或JavaScript。如何使用jQuery或JavaScript获取文件的扩展名?

任何建议或链接将欣赏!

+4

文件的* name *可能会告诉你**没有任何**关于它实际包含的内容。 – Pointy 2010-11-12 13:10:54

+0

看看这个http://*.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

一个简单的解决方案是.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

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

您可能希望至少使该语法有效。 *编辑*:你走了。 – 2010-11-12 13:10:37

+0

哈哈对不起,快速键盘上 – tbleckert 2010-11-12 13:12:51

用整个文件名拆分。作为分隔符。分割将分割的项目存储在数组中。获取数组的最后一个元素。

使用lastIndexOf()substr()

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

注意,此实现返回一个空字符串,如果文件名不包含任何句点字符(即没有扩展名)。在这种情况下,基于split()的实现有时会返回完整的文件名。

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

lastIndexOf将返回最后一次出现的指定搜索参数的索引。如果没有找到,-1将返回

如果您需要验证多个扩展名:

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

Frédéric的回答对我很好,但是,该功能在Chrome控制台中出现“意外标识符”错误。 “int”是问题,并且此修改工作。

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