我有一个.NET网页表单,其中包含一个文件上传控件,与一个正则表达式验证器相关联。该验证器需要验证只允许上传特定的文件类型(jpg,gif,doc,pdf)。
目前实现此功能的正则表达式为:
^(([a-zA-Z]:)|(\{2}w+)$?)(\(w[w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
然而,这似乎不起作用...有人可以给我一些正则表达式的帮助吗?
我有一个.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] code>)等等...