Подтвердить что ты не робот

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

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

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


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

Однако, похоже, что это не работает... Кто-нибудь может мне помочь?

4b9b3361

Ответ 1

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

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

Вы можете использовать инструмент, например Expresso, чтобы проверить ваши регулярные выражения.

Ответ 2

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

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

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

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

Ответ 3

^.+\.(?:(?:[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/

Ответ 4

Вы можете вставлять регистр неприемлемости в регулярное выражение так:

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

Ответ 5

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

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

И установите соответствие нечувствительным к регистру.

Ответ 6

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

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

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