使用简单的正则表达式验证浏览器上传文件名和扩展名
我的正则表达式是正确的。仅适用于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您有时有完整路径但只对文件名感兴趣,则不能使用
^
开头。文件名的点应该被转义。您可以尝试这样的操作:
看起来您只能在 Firefox 中获得文件,而在其他浏览器中则获得完整路径。
我总是在字符串中添加前缀
/
,然后验证最后一个 fileseprator/
或\
之后的最后一部分。此示例使用 Lookahead 检查文件前面的文件分隔符(或手动添加
/
),并且还允许检查文件名的最大 28 个字符。请参阅此在线正则表达式测试器: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:
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:就目前情况而言,您的正则表达式会验证如下所示的垃圾:
....pdf
____pdf
它还拒绝完全有效的文件:
i.jpg
pic.JPG
最简单的方法是分多个步骤验证内容:
提取扩展名:
<前><代码>\.[a-zA-Z]{3,4}$
小写扩展名并根据可接受值的数组对其进行验证。
可以选择验证文件的名称(尽管我建议清理它):
<前><代码>[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:
Extract the extension:
Lowercase the extension and validate it against an array of acceptable values.
Optionally validate the file's name (though I'd recommend cleaning it instead):