【问题标题】:Validating browser upload file name and extension with simple regex使用简单的正则表达式验证浏览器上传文件名和扩展名
【发布时间】:2011-05-12 06:10:36
【问题描述】:

我的正则表达式是正确的。仅适用于 Firefox。我将如何制作这种跨浏览器、跨平台的方式。因为它是文件名和扩展名验证,所以你是对的,我正在使用文件上传控件。

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

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

分机必须在组内。

当这在 forefox 中表现出色时,我认为是因为 firefox 中的 fileUpload.value = Filename.extension。它在谷歌浏览器和 IE 中非常失败。我正在使用上面的 .net 正则表达式验证器并启用了 ClientScript。

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

注意:

谷歌浏览器:

提供文件上传控制值作为 c:\fakePath\filename.extension

IE:

提供完整路径。

【问题讨论】:

  • 请提供一些您尝试匹配的输入示例以及失败的确切位置

标签: javascript regex validation file-upload cross-browser


【解决方案1】:

如果您有时有完整路径但只对文件名感兴趣,则不能使用 ^ 开头。文件的点应该被转义。

你可以试试这样的:

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


看起来您只能使用 Firefox 获取文件,但使用其他浏览器获取完整路径。
我总是在您的字符串中添加前缀/,而不是验证最后一个文件分隔符/\ 之后的最后一部分。

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

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

【讨论】:

  • 感谢您的宝贵解释。这个正则表达式现在可以跨浏览器工作。
【解决方案2】:

就目前而言,您的正则表达式验证垃圾如下:

  • ....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_-]+)*
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-11-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2013-03-18
    相关资源
    最近更新 更多