Проверка типов файлов по регулярному выражению - PullRequest
66 голосов
/ 17 декабря 2008

У меня есть веб-форма .NET, которая имеет элемент управления загрузкой файлов, связанный с валидатором регулярных выражений. Этот валидатор должен подтвердить, что только определенные типы файлов должны быть разрешены для загрузки (jpg, gif, doc, pdf)

Текущее регулярное выражение, которое делает это:


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

Однако, похоже, это не работает ... Может кто-нибудь дать мне немного помощи от ex reg?

Ответы [ 6 ]

145 голосов
/ 17 декабря 2008

На мой взгляд, ваше регулярное выражение кажется слишком сложным. Также помните, что точка - это специальный символ, означающий «любой символ». Следующее регулярное выражение должно работать (обратите внимание на экранированные точки):

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

Вы можете использовать инструмент типа Expresso для проверки ваших регулярных выражений.

14 голосов
/ 17 декабря 2008

Вы просто хотите убедиться, что файл имеет заданное расширение? Вы можете упростить то, что вы пытаетесь сделать с чем-то вроде этого:

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

Затем, когда вы вызываете IsMatch (), убедитесь, что передали RegexOptions.IgnoreCase в качестве второго параметра. Нет причин для перечисления вариантов корпуса.

Редактировать: Как упоминает Дарио, это не будет работать для RegularExpressionValidator, так как он не поддерживает параметры оболочки.

13 голосов
/ 28 января 2011
^.+\.(?:(?:[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/

11 голосов
/ 18 декабря 2008

Вы можете встроить нечувствительность к регистру в регулярное выражение следующим образом:

\.(?i:)(?:jpg|gif|doc|pdf)$
6 голосов
/ 09 ноября 2013

Вы можете использовать этот шаблон для каждого типа файла:

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

для примера: вы можете добавить ([rR][aA][rR]) для типа файла Rar и т. Д ...

5 голосов
/ 17 декабря 2008

Ваше регулярное выражение, кажется, проверяет как имя файла, так и расширение. Это то, что вам нужно? Я предполагаю, что это просто расширение и будет использовать регулярное выражение, как это:

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

И установите соответствие без учета регистра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...