我有一个.NET Web窗体,该窗体具有一个与正则表达式验证器绑定的文件上传控件。该验证器需要验证仅允许上传某些文件类型(jpg,gif,doc,pdf)
当前执行此操作的正则表达式为:
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
但是,这似乎不起作用...任何人都可以给我一点reg ex帮助吗?
我有一个.NET Web窗体,该窗体具有一个与正则表达式验证器绑定的文件上传控件。该验证器需要验证仅允许上传某些文件类型(jpg,gif,doc,pdf)
当前执行此操作的正则表达式为:
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
但是,这似乎不起作用...任何人都可以给我一点reg ex帮助吗?
Answers:
我认为您的正则表达式似乎太复杂了。另外,请记住,点是一个特殊字符,表示“任何字符”。以下正则表达式应该起作用(请注意转义的点):
^.*\.(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)$