Соответствие с последним экземпляром символа, если присутствует, для проверки имени файла с расширением в регулярном выражении - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь ограничить загрузку пользователями Long named files и unaccepted file extensions с помощью средства проверки регулярных выражений в Asp.net 2.0 Webforms.Я хотел, чтобы символы filename to be withing 30 [ограничение из-за Db Design] и совпадения расширений png,jpeg,zip,rar,7z. Я придумал это регулярное выражение, которое проверяет, что имя файла является допустимым символом, а затем приходит . буквенный период, а затем расширение.

^[\w_]{3,28}\.(pdf|jpeg|png)$

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

(\\(?!.*\\)|)[\w_]{3,30}\.(pdf|jpeg|jpg|pdf)$

Обновление: Даже это работает только из-за того, что fileName не ограничен 30 символами

[\w]{3,30}\.(pdf|jpeg|jpg|pdf)(?=)

info: Он даже подтвердил c:\fakePath\stackoverflowstackoverflowstackoverflowstackoverflow кстати, он выделил последние 30 символов в fileName.

Проблема заключалась в том, что я хочу, чтобы проверка выполнялась на клиенте во время загрузки, следовательно, EnableClientScript = True, но, к моему удивлению, fileUpload.value, который проверяет элемент управления, был совершенно другим в большинстве браузеров.

Отчеты Firefox: filename.extension, как и ожидалось,

Internet Explorer сообщил полный путь к файлу

chrome сообщает C: \ fakePath \ fileName.extension

Теперь, как мне написать выражение для этого, моя идея состояла в том, чтобы найти последний экземпляр символа \, если он присутствует в значении, и начать там форму.Но мои знания Regex полностью ограничены основами.может ли кто-нибудь исправить меня и предоставить рабочее регулярное выражение,

Примечание: Pls, прежде чем предоставить один, убедитесь, что оно отвечает моим требованиям, работает в кросс-браузерном режиме и проверяет на clientSide.

1 Ответ

1 голос
/ 31 мая 2011

Я предлагаю это:

\b\w{3,30}\.(?:pdf|jpe?g|png|7z|zip|rar)$

Это соответствует имени файла, начинающемуся с границы слова (без \b оно может начать совпадение в середине слишком длинного имени файла). В имени файла допускаются только буквы ASCII, цифры и подчеркивания (без ударных символов!), Также запрещены точки.

Не забудьте построить регулярное выражение, используя буквенное обозначение регулярного выражения:

var myregexp = /\b\w{3,30}\.(?:pdf|jpe?g|png|7z|zip|rar)$/;
...