使用简单的正则表达式验证浏览器上传文件名和扩展名

Validating browser upload file name and extension with simple regex

本文关键字:文件名 扩展名 浏览器 验证 简单 正则表达式      更新时间:2023-09-26

我做对了正则表达式。仅适用于火狐浏览器。我将如何制作这种跨浏览器、跨平台的方式。由于它是文件名和扩展名验证,您是对的,我正在使用文件上传控件。

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

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

扩展必须在组内。

当这在 forefox 中工作得很好时,我假设是因为 fileUpload.value = Firefox 中的文件名.扩展名。它在谷歌浏览器和IE中非常失败。我在启用 .net 正则表达式验证器和客户端脚本的情况下使用上述内容。

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

注意:

谷歌浏览器:

提供文件上传控件值为 c:''fakePath''filename.extension

即:

提供完整路径。

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

你可以尝试这样的事情:

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


看起来您只能获得Firefox的文件,而其他浏览器则获得完整路径。
我总是会为您的字符串添加一个前缀/,而不是验证最后一个文件之后的最后一部分/'

此示例使用前瞻检查文件之前的文件分隔符(或手动添加的/),并且还允许检查文件名的最大 28 个字符。 请参阅此在线正则表达式测试器:

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

就目前而言,您的正则表达式会像下面这样验证垃圾:

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