English 中文(简体)
通过正则表达式验证文件类型
原标题:
  • 时间:2008-12-17 15:37:50
  •  标签:

我有一个.NET网页表单,其中包含一个文件上传控件,与一个正则表达式验证器相关联。该验证器需要验证只允许上传特定的文件类型(jpg,gif,doc,pdf)。

目前实现此功能的正则表达式为:


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

然而,这似乎不起作用...有人可以给我一些正则表达式的帮助吗?

最佳回答

在我看来,您的正则表达式似乎有点太复杂了。而且,请记住,句点是一个特殊字符,表示“任何字符”。以下正则表达式应该可以工作(注意转义句点):

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

你可以使用像Expresso这样的工具来测试你的正则表达式。

问题回答
^.+.(?:(?:[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/上测试正则表达式。

你是想验证文件是否具有特定扩展名吗?你可以尝试使用以下代码来简化你所要做的操作:

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

然后,当你调用IsMatch()时,请确保将RegexOptions.IgnoreCase作为你的第二个参数传递。 没有必要列出大小写变化的变体。

编辑:正如Dario所提到的,这对于RegularExpressionValidator不起作用,因为它不支持大小写选项。

你可以这样将不区分大小写嵌入到正则表达式中:

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

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

.(jpg|gif|doc|pdf)$

并设置匹配不区分大小写。

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

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

例如:对于Rar文件类型,您可以添加( [rR] [aA] [rR] )等等...





相关问题