我有一个这样的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;
}
}
您认为这是什么问题?
答案 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