2013-05-17 71 views
1

我想过滤文件上传。它在FireFox中工作正常,但在谷歌浏览器中它始终显示无效文件,尽管文件有效。正则表达式不适用于谷歌浏览器

function validate() { 
    var uploadcontrol = document.getElementById('<%=fileupload.ClientID%>').value; 

    //Regular Expression for fileupload control. 
    //var reg = /^(([a-zA-Z])|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.jpg|.jpeg|.jpe|.gif|.bmp|.png|.JPG|.JPEG|.JPE|.GIF|.BMP|.PNG)$/; 
    var reg = /^(([0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\%\+\~\_ ]))+(.jpg|.jpeg|.jpe|.gif|.bmp|.png|.JPG|.JPEG|.JPE|.GIF|.BMP|.PNG|.dds|.psd|.pspimage|.tga|.thm|.tif|.tiff|.yuv)$/; 

    if (uploadcontrol.length > 0) { 
     //Checks with the control value. 
     if (reg.test(uploadcontrol)) { 
      return true; 
     } 
     else { 
      //If the condition not satisfied shows error message. 
      alert("Only Images are allowed!"); 
      return false; 
     } 
    } 
} //End of function validate. 
+3

任何原因,你正在做一个区分大小写的考验吗?您在开始处包含'a-zA-Z',但某些文件扩展名只允许小写。如果你给正则表达式添加一个'i'标志,它是否解决了这个问题?如:'var reg =/yourregexhere/i;'(这也将简化模式,因为您不需要同时指定'.jpg'和'.JPG'等) – nnnnnn

+2

此正则表达式的哪个文件名失败?你能给个例子吗? –

+0

文件扩展名之前的点'.'需要被转义,并且除'']之外的那个字符类中的所有字符不需要被转义。 – Bergi

回答

1

这是一个非常奇怪的正则表达式,你在那里。试试这一个

var reg = /^[^\\//]+\.(jpg|jpeg|jpe|gif|bmp|png|dds|psd|pspimage|tga|thm|tif|tiff|yuv)$/i; 

这一个适用于我在铬中的各种文件名。

最后的i修饰符会忽略大小写,而匹配的名称会更像这样。

0

您的测试似乎在Chrome是工作,see this fiddle

因此我认为你需要调试在Chrome和Firefox的uploadcontrol值,看看它们之间的区别,那么调整你的正则表达式。

+0

正则表达式在Chrome中“起作用”,Chrome正确地解释了正则表达式。但是,这种正则表达式不适合OP的情况,除非他特别想要允许大写和小写'jpg',但只有小写'tif' ... – nnnnnn

+0

同意正则表达式是狡猾的。我只是表示它在Chrome中的工作原理与它在FireFox中声明的OP相同。 –

相关问题