通过正则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这样的扩展名就可以通过了。
您的正则expression式似乎validation文件名和扩展名。 那是你需要的吗? 我会假设它只是扩展,并会使用这样的正则expression式:
\.(jpg|gif|doc|pdf)$
并将匹配设置为不区分大小写。
您可以为每个文件types使用此模板:
ValidationExpression="^.+\.(([pP][dD][fF])|([jJ][pP][gG])|([pP][nN][gG])))$"
例如:你可以为RAR文件types添加( [rR][aA][rR]
)等等。