2011-05-12 88 views
0

我得到了正确的正则表达式。仅适用于Firefox。我如何使这个跨浏览器,跨平台的方式。由于它是文件名和扩展验证你是正确的,我正在使用文件上传控制。使用简单的正则表达式验证浏览器上传文件名和扩展名

^[a-zA-Z0-9_\.]{3,28}(.pdf|.txt|.doc|.docx|.png|.gif|.jpeg|.jpg|.zip|.rar)$ 

匹配文件名不能为空[3,28个字符长]。

分机必须在组内。

当这项工作在Forefox中非常出色我假设,因为fileUpload.value = Filename.extension在Firefox中。 Google chrome和IE很失败。我正在使用.net正则表达式验证器和ClientScript启用。

我知道如何在服务器上验证它,所以请不要使用服务器端解决方案。

注:

谷歌chrome:

提供FileUpload控件值C:\ fakePath \ filename.extension

IE:

提供了完整的路径。

+0

请提供输入一些例子尝试匹配并哪儿失败 – 2011-05-12 06:22:57

回答

3

如果您有时有完整路径但只对文件名感兴趣,则不能使用^开始。归档的点应该逃脱。

你可以尝试这样的事:

[^\\/]{3,}\.(pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$ 


,因为它看起来你只能使用Firefox的文件,但与其他浏览器的完整路径。
我总是为您的字符串添加前缀/,并验证最后一个文件选择器/\之后的最后一部分。

本示例使用lookahead在文件之前检查文件分隔符(或手动添加/),并且还允许检查文件名最大28字符。看到这个online regex tester

(?<=[\\/])[\w\.]{3,28}\.(?:pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$ 
+0

感谢有价值说明。这个正则表达式现在适用于各种浏览器。 – Deeptechtons 2011-05-25 16:27:55

0

就目前情况来看,你的正则表达式验证的垃圾像下面这样:

  • ....pdf
  • ____pdf

它也拒绝完全有效的文件:

  • i.jpg
  • my-pic.jpg
  • pic.JPG

最简单的是验证在多个步骤的事情:

  1. 提取扩展目标:

    \.[a-zA-Z]{3,4}$ 
    
  2. 下如果是扩展并且针对可接受值的数组进行验证。

  3. 有选择性地验证该文件的名称(虽然我建议你清洗它,而不是):

    [a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)* 
    
相关问题