【问题标题】:Upload Validation for photos照片上传验证
【发布时间】:2010-12-12 20:16:54
【问题描述】:

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


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;

}

}

你认为是什么问题?

【问题讨论】:

  • 一旦你将 final_ext 与它们不匹配的 extensions[] 进行比较,它就会返回 0。所以只要第一个扩展 final_ext 测试有效,它就可以工作。否则,如果 final_ext 与您测试的第一个扩展不匹配,则会失败。

标签: javascript validation error-handling file-upload


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    应该是

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

    还要注意return 会立即结束当前函数,因此在return 之后放置break 是没有意义的。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 大声笑。您也在最后添加了 return 0 语句。投票给你;)
      • @tvanover:把话从我嘴里说出来。
      【解决方案4】:

      改用正则表达式

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

      【讨论】:

      • 我本来想说使用 split 方法,但在这种情况下,正则表达式确实更有意义:)
      • 感谢你们的帮助,但 matt 的代码适用于我的情况
      【解决方案5】:

      试试这样的:

      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
      

      【讨论】:

        猜你喜欢
        • 2020-04-19
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2017-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多