所以,我要做的是在发送到服务器端的其他验证(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
或任何其他有效扩展名,则验证将通过。那么,我该如何解决这个问题?
也许找到一种方法来获取文件名的最后一个扩展名?
当然,任何提示,都是我的客人。
感谢。
答案 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');
}
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;