当前位置:  开发笔记 > 编程语言 > 正文

通过正则表达式验证文件类型

如何解决《通过正则表达式验证文件类型》经验,为你挑选了6个好方法。

我有一个.NET webform,它有一个与正则表达式验证器绑定的文件上传控件.此验证程序需要验证是否只允许上传某些文件类型(jpg,gif,doc,pdf)

执行此操作的当前正则表达式为:


^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$

然而,这似乎并没有起作用......任何人都可以给我一点注册帮助吗?

谢谢.



1> Dario Solera..:

在我看来,你的正则表达式似乎有点过于复杂.此外,请记住,点是一个特殊字符,意思是"任何字符".以下正则表达式应该有效(注意转义的点):

^.*\.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF)$

您可以使用Expresso之类的工具来测试正则表达式.


问题是正则表达式用于RegularExpressionValidator ASP.NET控件中,而AFAIK不接受IgnoreCase之类的选项。

2> Joseph Ferri..:

您是否只是想验证文件是否属于给定的扩展名?您可以使用以下内容简化您要执行的操作:

(.*?)\.(jpg|gif|doc|pdf)$

然后,当您调用IsMatch()时,请确保将RegexOptions.IgnoreCase作为第二个参数传递.没有理由要列出套管的变化.

编辑:正如Dario所提到的,这不适用于RegularExpressionValidator,因为它不支持套管选项.



3> 小智..:
^.+\.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$

将接受文件名至少为一个字符的.doc,.docx,.pdf文件:

^           = beginning of string
.+          = at least one character (any character)
\.          = dot ('.')
(?:pattern) = match the pattern without storing the match)
[dD]        = any character in the set ('d' or 'D')
[xX]?       = any character in the set or none 
              ('x' may be missing so 'doc' or 'docx' are both accepted)
|           = either the previous or the next pattern
$           = end of matched string

警告!如果不在(?:)中包含整个扩展链,则会传递像.docpdf这样的扩展名.

您可以在http://www.regextester.com/上测试正则表达式



4> ICR..:

您可以将case insensitity嵌入到正则表达式中,如下所示:

\.(?i:)(?:jpg|gif|doc|pdf)$


不,JS根本不支持内联修饰符。另外,即使在.NET中,您的正则表达式也无法使用;您需要“ \。(?i)(?: jpg | gif | doc | pdf)$”或“ \。(?i:jpg | gif | doc | pdf)$”。这:“(?i :)”不匹配任何内容,不区分大小写。

5> 小智..:

您可以将此模板用于每种文件类型:

ValidationExpression="^.+\.(([pP][dD][fF])|([jJ][pP][gG])|([pP][nN][gG])))$"

例如:你可以[rR][aA][rR]为Rar文件类型等添加()...



6> PEZ..:

您的正则表达式似乎验证文件名和扩展名.这就是你需要的吗?我假设它只是扩展名,并将使用这样的正则表达式:

\.(jpg|gif|doc|pdf)$

并将匹配设置为不区分大小写.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有