Intereting Posts
Может ffmpeg записать во временном коде? Возможно ли использование переполнения буфера в C #? Помощь в исправлении ошибок в C # “Аргумент ref или out должен быть назначаемым” Страницы справки WebAPI: отключить для выпуска Production Есть ли способ опустить параметр? .NET Google api 1.7 beta аутентификация с помощью токена обновления Получение значения из ячейки Gridview Google Translate V2 не может передавать большие текстовые переводы из C # Как я могу проверить 3G, Wi-Fi, EDGE, сотовые сети в Windows Phone 7? Как мне получить GetModuleFileName (), если у меня есть только дескриптор windows (hWnd)? Когда использовать насмешливую и фальшивку при тестировании на C #? Как правильно получить байт-массив из метода Web Api в C #? Напротив annotations данных в .net? Добавление элементов в список объектов приводит к дублированию объектов при использовании NEW в цикле Вам нужно вызвать Flush () в streamе или записи, если вы используете инструкцию «using»?

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

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

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

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

Однако, похоже, это не работает … Может ли кто-нибудь дать мне небольшую помощь?

Благодарю.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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