2013-05-17 4 views
1

Я хочу фильтровать файл загрузчика. Он отлично работает в FireFox, но в Google Chrome всегда отображается недопустимый файл, хотя файл действителен.Регулярные выражения, не работающие в google chrome

function validate() { 
    var uploadcontrol = document.getElementById('<%=fileupload.ClientID%>').value; 

    //Regular Expression for fileupload control. 
    //var reg = /^(([a-zA-Z])|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.jpg|.jpeg|.jpe|.gif|.bmp|.png|.JPG|.JPEG|.JPE|.GIF|.BMP|.PNG)$/; 
    var reg = /^(([0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\%\+\~\_ ]))+(.jpg|.jpeg|.jpe|.gif|.bmp|.png|.JPG|.JPEG|.JPE|.GIF|.BMP|.PNG|.dds|.psd|.pspimage|.tga|.thm|.tif|.tiff|.yuv)$/; 

    if (uploadcontrol.length > 0) { 
     //Checks with the control value. 
     if (reg.test(uploadcontrol)) { 
      return true; 
     } 
     else { 
      //If the condition not satisfied shows error message. 
      alert("Only Images are allowed!"); 
      return false; 
     } 
    } 
} //End of function validate. 
+3

Любая причина, по которой вы делаете тест, чувствительный к регистру? Вы включаете 'a-zA-Z' в начале, но некоторые расширения файлов допускают только строчные буквы. Если вы добавите флаг 'i' в регулярное выражение, устранит проблему? Как и в: 'var reg =/yourregexhere/i;' (Это также упростит шаблон, поскольку вам не нужно указывать как '.jpg, так и' .JPG' и т. Д.) – nnnnnn

+2

Какое имя файла выполняет это регулярное выражение, ? Можете ли вы привести пример? –

+0

Точка '.' перед расширением файла должна быть экранирована, и все символы в этом символьном классе, отличном от' \] - ', не должны быть экранированы. – Bergi

ответ

1

Это очень странное регулярное выражение, которое у вас есть. Попробуйте это

var reg = /^[^\\//]+\.(jpg|jpeg|jpe|gif|bmp|png|dds|psd|pspimage|tga|thm|tif|tiff|yuv)$/i; 

Это работает для меня с различными именами файлов в хроме.

Модификатор i в конце будет игнорировать корпус, а совпадение имен немного более великодушное.

0

Ваш тест, кажется, работает в хроме, see this fiddle.

Как таковой, я думаю, вам нужно отладить значение uploadcontrol в chrome и firefox, чтобы увидеть, как они отличаются, а затем настройте ваше регулярное выражение.

+0

Регулярное выражение «работает» в Chrome в том смысле, что Chrome правильно интерпретирует регулярное выражение точно так, как указано. Но это регулярное выражение не подходит для ситуации OP, если только он специально не хочет использовать верхний и нижний регистр 'jpg', но только нижний регистр' tif' ... – nnnnnn

+0

Согласен, что регулярное выражение является изворотливым. Я просто имел в виду, что он работает в Chrome таким же образом, что и OP, о котором он говорил, работает в FireFox. –

Смежные вопросы