Проверка правильности загрузки имени браузера и расширения файла с помощью простого регулярного выражения - PullRequest
0 голосов
/ 12 мая 2011

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

^[a-zA-Z0-9_\.]{3,28}(.pdf|.txt|.doc|.docx|.png|.gif|.jpeg|.jpg|.zip|.rar)$

соответствует Имя файла не должно быть пустым [3, длина 28 символов].

Добавочный номер должен быть в группе.

Когда это работает превосходно в forefox, я предполагаю, что fileUpload.value = Filename.extension в firefox. Это ужасно терпит неудачу в Google Chrome и IE. Я использую вышеупомянутое с валидатором регулярных выражений .net и включенным ClientScript.

Я знаю, как проверить его на сервере, поэтому, пожалуйста, никаких решений на стороне сервера.

Примечание:

Google Chrome:

Предоставляет значение элемента управления для загрузки файла в виде c: \ fakePath \ filename.extension

IE:

Предоставляет полный путь.

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

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

Вы можете попробовать что-то вроде этого:

[^\\/]{3,}\.(pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$

Похоже, вы получаете только файл с Firefox, но полный путь с другими браузерами.Я всегда добавляю префикс / к вашей строке, а затем проверяю последнюю часть после последнего файлового сепаратора / или \.

В этом примере используется lookahead для проверки файлового разделителя (или добавления / вручную) перед файлом, а также проверка макс. 28 символов для имени файла.посмотрите это онлайн тестер регулярных выражений :

(?<=[\\/])[\w\.]{3,28}\.(?:pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$
1 голос
/ 12 мая 2011

При существующем состоянии ваше регулярное выражение проверяет мусор следующим образом:

  • ....pdf
  • ____pdf

Он также отклоняет совершенно корректные файлы:

  • i.jpg
  • my-pic.jpg
  • pic.JPG

Проще всего проверить вещи за несколько шагов:

  1. Извлеките расширение:

    \.[a-zA-Z]{3,4}$
    
  2. Нижний регистр расширения и проверка его по массиву допустимых значений.

  3. При желании проверьте имя файла (хотя я бы порекомендовал очистить его):

    [a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*
    
...