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

发布于 2024-11-06 20:30:55 字数 577 浏览 2 评论 0原文

我的正则表达式是正确的。仅适用于 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。它在 Google Chrome 和 IE 中严重失败。我使用上述内容并启用了 .net 正则表达式验证器和 ClientScript。

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

注意:

Google chrome:

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

IE :

提供完整路径。

I got the regexp right. Works perfectly for Firefox ONLY. How would i make this cross browser, cross platform manner. Since it is file name and extension validation you are right i am using File Upload control.

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

matches File name must not be empty[ 3, 28 characters long].

Extension must be within the group.

When this works superb in forefox i assume because the fileUpload.value = Filename.extension in firefox. It awfully fails in Google chrome and IE. I am using the above with .net Regular Expression validator and ClientScript enabled.

I know how to validate it on server, so please no server side solutions.

note:

Google chrome:

Provides the fileupload control value as c:\fakePath\filename.extension

IE:

Provides the Full path.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄离 2024-11-13 20:30:55

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

您可以尝试这样的操作:

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

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

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

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

You can't use the ^ to start with if you sometimes have a full path but are only interested in the filename. The dot of the filending should be escaped.

You could try something like this:

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

As it looks you get only the file with Firefox but the full path with other browsers.
I'd always add a prefix / to your string and than validate the last part after the last fileseprator / or \.

This example uses lookahead to check the fileseparator (or manually added /) before the file and also allows the check of max 28 char for filename. see this online regex tester:

(?<=[\\/])[\w\.]{3,28}\.(?:pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$
以酷 2024-11-13 20:30:55

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

  • ....pdf
  • ____pdf

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

  • i.jpg
  • < code>my-pic.jpg
  • pic.JPG

最简单的方法是分多个步骤验证内容:

  1. 提取扩展名:

    <前><代码>\.[a-zA-Z]{3,4}$

  2. 小写扩展名并根据可接受值的数组对其进行验证。

  3. 可以选择验证文件的名称(尽管我建议清理它):

    <前><代码>[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*

As things stand, your regex validates garbage like the following:

  • ....pdf
  • ____pdf

It also rejects perfectly valid files:

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

The easiest is to validate things in multiple steps:

  1. Extract the extension:

    \.[a-zA-Z]{3,4}$
    
  2. Lowercase the extension and validate it against an array of acceptable values.

  3. Optionally validate the file's name (though I'd recommend cleaning it instead):

    [a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文