我有一个.NET webform,它有一个与正则表达式验证器绑定的文件上传控件。此验证程序需要验证是否只允许某些文件类型上传(jpg,gif,doc,pdf)
执行此操作的当前正则表达式为:
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
然而,这似乎不起作用......任何人都可以给我一点帮助吗?
答案 0 :(得分:145)
在我看来,你的正则表达式似乎有点过于复杂。此外,请记住,点是一个特殊字符,意思是“任何字符”。以下正则表达式应该有效(注意转义的点):
^.*\.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF)$
您可以使用Expresso之类的工具来测试正则表达式。
答案 1 :(得分:14)
您是否只想验证文件是否属于给定的扩展名?您可以使用以下内容简化您要执行的操作:
(.*?)\.(jpg|gif|doc|pdf)$
然后,当您调用IsMatch()时,请确保将RegexOptions.IgnoreCase作为第二个参数传递。没有理由要列出套管的变化。
编辑:正如Dario所提到的,这不适用于RegularExpressionValidator,因为它不支持套管选项。
答案 2 :(得分:13)
^.+\.(?:(?:[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这样的扩展名。
处测试正则表达式答案 3 :(得分:11)
您可以将case insensitity嵌入到正则表达式中,如下所示:
\.(?i:)(?:jpg|gif|doc|pdf)$
答案 4 :(得分:6)
您可以将此模板用于每种文件类型:
ValidationExpression="^.+\.(([pP][dD][fF])|([jJ][pP][gG])|([pP][nN][gG])))$"
例如:您可以为Rar文件类型等添加([rR][aA][rR]
)...
答案 5 :(得分:5)
您的正则表达式似乎验证了文件名和扩展名。这就是你需要的吗?我假设它只是扩展名并使用这样的正则表达式:
\.(jpg|gif|doc|pdf)$
并将匹配设置为不区分大小写。