0

所以,我要做的是在发送到服务器端(php)的其他验证之前使用 javascript/jquery 验证文件扩展名。

我知道这里有很多资源,但是,我正在尝试以自己的方式制作。

我达到了一个简单的想法,就像上面的代码:

// remove all elements to take only the file name
var fileName        = $('input[type=file]').val().split('\\').pop().toLowerCase();  
    validExtension  = ['.jpg', '.png', '.gif','.jpeg']; // list of valid extensions

$.each(validExtension, function (e, val) { // run thru all valid extensions
    if (fileName.indexOf(val) !== -1) { // if found a valid one, stop validation.
        invalidExt = false;
        return false;
    } else { // else, error true...
        invalidExt = true;
    }
});

if (invalidExt) {
    alert('error');
}else{
    alert('success');
}

问题是,如果文件.jpg在名称中间有一个或任何其他有效扩展名,例如desert.jpg.exe,验证将通过。那么,我该如何解决呢?

也许找到一种方法来获取文件名的最后一个扩展名?

当然,任何提示,请成为我的客人。

谢谢。

4

2 回答 2

3

这是我的做法:

var validExtensions = {
    jpg: true,
    jpeg: true,
    png: true,
    gif: true
};


var filename = $('input[type=file]').val().toLowerCase();

if (!validExtensions[filename.substr(filename.lastIndexOf('.')+1)]) {
    alert('Invalid extension');
}
  • 将有效的扩展名放在对象中可以让您快速 (O(1)) 查找时间。
  • 用于lastIndexOf获取文件名中的最后一个句点。这样,您总是在查看扩展名,而不管它之前是什么。
于 2012-09-04T19:28:17.680 回答
0

没有 jQuery :

var filename = "photo.exe.jpg";

var validExtensions = ['jpg', 'png', 'gif', 'jpeg'];
var filenameLowerCase = filename.toLowerCase();
var isValid = false;

for(var i=0; i<validExtensions.length; i++)
    if(filenameLowerCase.indexOf(validExtensions[i], filenameLowerCase.length - validExtensions[i].length) !== -1)
        isValid = true;
于 2012-09-04T19:31:28.290 回答