通过正则expression式validation文件types

我有一个.NET Web窗体,它有一个file upload控制与正则expression式validation器绑定。 这个validation器需要validation只有某些文件types应该被允许上传(jpg,gif,doc,pdf)

目前正则expression式是这样的:

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

但是,这似乎并没有工作…任何人都可以给我一点注册前帮助?

谢谢。

在我看来,你的正则expression式似乎有些复杂。 另外,请记住点是一个特殊的字符,意思是“任何字符”。 下面的正则expression式应该工作(注意逃脱的点):

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

你可以使用像Expresso这样的工具来testing你的正则expression式。

你只是想validation文件是给定的扩展名? 你可以简化你想要做的事情,像这样:

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

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

编辑:作为达里奥提到,这不会为RegularExpressionValidator工作,因为它不支持套pipe选项。

您可以将大小写不敏感embedded到正则expression式中,如下所示:

 \.(?i:)(?:jpg|gif|doc|pdf)$ 
 ^.+\.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$ 

将接受具有至less一个字符的文件名的.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/上testing正则expression式;

您的正则expression式似乎validation文件名和扩展名。 那是你需要的吗? 我会假设它只是扩展,并会使用这样的正则expression式:

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

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

您可以为每个文件types使用此模板:

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

例如:你可以为RAR文件types添加( [rR][aA][rR] )等等。