图像文件名和路径验证在Firefox中无效,但在Chrome中有效

时间:2015-06-20 06:40:58

标签: javascript google-chrome firefox

此图片文件名和路径验证代码适用于Chrome,但不适用于Firefox。即使我上传了正确的图像文件,它也会显示验证错误。任何人都可以使这个代码在Firefox中运行吗?

function add_img(f) {
  z = f;
  img_title = $('#img_title' + f + '').val();
  img_path = $('#img_path' + f + '').val();
  img_desc = $('#img_desc' + f + '').val();
  if (img_title == '' || img_path == '') {
    alert('Please upload a valid image with title.');
    return false;
  }
  var uploadcontrol = img_path;
  var reg = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+  (.jpeg|.JPEG|.gif|.GIF|.png|.PNG|.jpg|.JPG)$/;
  if (uploadcontrol.length > 0) {
    //Checks with the control value.
    if (!reg.test(uploadcontrol)) {
      alert("Only jpg,jpeg,gif,png files are allowed!");
      return false;
    }
  }
}

2 个答案:

答案 0 :(得分:0)

我不认为跨浏览器的正则表达式实现存在差异。可能是你没有在Firefox中获得完整的检查路径并且正在Chrome中获取它。 您可以尝试console.log(uploadcontrol)检查两个浏览器中收到的路径。可能是firefox没有给出你期望它的驱动器号,因此它没有通过正则表达式测试。

答案 1 :(得分:0)

出于安全原因,浏览器不会显示实际路径。但是chrome会返回c:fakepath /类似的东西。所以不会影响验证。但Firefox只返回文件名。所以我只验证文件名而不是路径。这适用于两种浏览器。

var uploadcontrol = img_path.split(/(\\|\/)/g).pop(); //code to get file name from path
var reg =  /^([a-zA-Z0-9\s_-])+(.jpeg|.JPEG|.gif|.GIF|.png|.PNG|.jpg|.JPG)$/;