Проверка типов файлов с помощью регулярного выражения


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

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


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

однако это, кажется, не работает...Может ли кто-нибудь дать мне небольшую помощь reg ex?

спасибо.

6 62

6 ответов:

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

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

вы можете использовать такой инструмент, как экспрессо чтобы проверить свои регулярные выражения.

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

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

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

Edit: как упоминает Дарио, это не будет работать для RegularExpressionValidator, так как он не поддерживает корпус опции.

^.+\.(?:(?:[dD][oO][cC][xX]?)|(?:[pP][dD][fF]))$

будет принимать .доктор. ,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/

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

\.(?i:)(?:jpg|gif|doc|pdf)$

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

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

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

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

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

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