Проверка типов файлов с помощью регулярного выражения
У меня есть веб-форма .NET, которая имеет элемент управления загрузкой файлов, связанный с валидатором регулярных выражений. Этот валидатор должен подтвердить, что только определенные типы файлов должны быть разрешены для загрузки (jpg, gif, doc, pdf)
Текущее регулярное выражение, которое делает это:
^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.doc|.DOC|.pdf|.PDF)$
Однако, похоже, что это не работает... Кто-нибудь может мне помочь?
Ответы
Ответ 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 и т.д.