Javascript扩展验证

时间:2012-09-04 19:20:11

标签: javascript jquery validation file-extension

所以,我要做的是在发送到服务器端的其他验证(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或任何其他有效扩展名,则验证将通过。那么,我该如何解决这个问题?

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

当然,任何提示,都是我的客人。

感谢。

2 个答案:

答案 0 :(得分: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获取文件名中的最后一个句点。通过这种方式,无论前面是什么,您都会一直在查看扩展程序。

答案 1 :(得分: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;