上传照片验证

时间:2009-11-03 22:59:45

标签: javascript validation error-handling file-upload

我有一个这样的javascript代码,用于验证我的用户在我的服务器上上传图片时的文件扩展名。它应该允许.jpg和.jpeg照片但是只接受.jpg文件,如果照片结束则无效用.jpeg.Here的代码:


function validate(x) {
    var extensions = new Array("jpg", "jpeg");
    var pos = x.lastIndexOf('.') + 1;
    var ext = x.substring(pos, x.length);
    var final_ext = ext.toLowerCase();

for (i = 0; i < extensions.length; i++) {
    if (extensions[i] != final_ext) {

        return 0;
        break;
    }
    return 1;

}

}

您认为这是什么问题?

5 个答案:

答案 0 :(得分:6)

应该是

for (i = 0; i < extensions.length; i++) {
    if (extensions[i] == final_ext) {
        return 1;
    }
}
return 0;

另请注意,return会立即结束当前函数,因此在break之后放置return毫无意义。

最后,如果此Javascript在客户端运行(即在Web浏览器中),请记住用户可以规避此操作(例如,通过使用Firebug)。您也可以在服务器端进行检查。

答案 1 :(得分:3)

尝试使用正则表达式

function validate(x) {
    return /.(jpg|jpeg)$/ig.test(x);
}

答案 2 :(得分:1)

在我看来它会将文件扩展名与列表中的第一项(.jpeg!= .jpg)进行比较并返回0.这意味着它将无法在第二个扩展名中尝试列表。

可能最好在比较中设置一个标志,直到扩展名列表中的所有项目都与文件扩展名进行比较后才会返回。

答案 3 :(得分:1)

你的逻辑错了。这就是循环应该是这样的:

for (i = 0; i < extensions.length; i++) {
    if (extensions[i] == final_ext) {
        return 1;
    }
}
return 0;

答案 4 :(得分:0)

尝试这样的事情:

VALID_EXT = 'jpeg jpg';
function validate(x) {
  return +(VALID_EXT.split(/\s+/).indexOf(x.replace(/^.*\./,'').toLowerCase()) >= 0)
}
validate('file.jpeg');     // 1
validate('file.jpg');      // 1
validate('file.pic.jpg');  // 1
validate('file.gif');      // 0