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 に答える