Это регулярное выражение не работает в Chrome - PullRequest
1 голос
/ 04 января 2011

Привет, я просто установил функцию проверки в jScript для проверки имени файла в элементе управления загрузкой файла [тип файла ввода]. Функция работает нормально в FF и иногда в ie, но никогда в Chrome. По существу, функция проверяет, является ли имя файла длиной от 1 символа до 25 символов. Содержит в списке только допустимые символы, цифры [без пробелов] и типы файлов. Не могли бы вы пролить свет на это * 1003? *

function validate(Uploadelem) {
    var objRgx = new RegExp(/^[\w]{1,25}\.*\.(jpg|gif|png|jpeg|doc|docx|pdf|txt|rtf)$/);
    objRgx.ignoreCase = true;
    if (objRgx.test(Uploadelem.value)) {
        document.getElementById('moreUploadsLink').style.display = 'block';
    } else {
        document.getElementById('moreUploadsLink').style.display = 'none';
    }
}

EDIT:

Нет, похоже, не работает, я использую IE 8 (перепробовал все режимы совместимости), Chrome v8.0, FF v 3.6. Вот HTML-фрагмент, в котором я подключил функцию проверки,

 <div>
    <input type="file" name="attachment" id="attachment" onchange="validate(this)" />
    <span class="none">Filename should be within (1-25) letters long. Can Contain only letters
        & numbers</span>
    <div id="moreUploads">
    </div>
    <div id="moreUploadsLink" style="display: none;">
        <a href="javascript:addFileInput();">Attach another File</a></div>
</div>

У меня отлично работает. Как вы вызываете функцию проверки? - M42

Вы пробовали это в Google Chrome и IE 8? я добавил HTML-фрагмент, где я использовал все рекомендуемые regX. Никаких подсказок о том, почему не работает !!

Майк, я не могу комментировать твой пост здесь, так что это для тебя. Сбой проверки, для которого когда-либо файл я выбираю во входных данных HTML. Я также проводил валидацию в событии onblur, но доказывает то же самое. Функция validate будет имитировать валидатор регулярных выражений asp.net, который отображает сообщение об ошибке валидации, когда регулярное выражение не встречается.

Ответы [ 4 ]

1 голос
/ 04 января 2011

Ваша спецификация туманна, но, похоже, вы хотите разрешить точки в именах файлов (в дополнение к точке, которая разделяет имя файла и расширение).

В этом случае попробуйте

var objRbx = /^[\w.]{1,25}\.(jpg|gif|png|jpeg|doc|docx|pdf|txt|rtf)$/i;

Это разрешает имена файлов, которые состоят только из символов a-z, A-Z, 0-9, _ и ., за которыми следуют обязательная точка и одно из указанных расширений.

1 голос
/ 05 января 2011

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

/^[\w]{1,25}\.*\.(jpg|gif|png|jpeg|doc|docx|pdf|txt|rtf)$/

на:

/\b[\w]{1,25}\.+(jpg|gif|png|jpeg|doc|docx|pdf|txt|rtf)$/
1 голос
/ 04 января 2011

Попробуйте упростить ваш код.

function validate(Uploadelem) {
    var objRgx = /^[\w]{1,25}\.+(jpg|gif|png|jpeg|doc|docx|pdf|txt|rtf)$/i;
    if (objRgx.test(Uploadelem.value)) {
        document.getElementById('moreUploadsLink').style.display = 'block';
    } else {
        document.getElementById('moreUploadsLink').style.display = 'none';
    }
}
0 голосов
/ 05 января 2011

решаемые

Основная причина того, что все [ПРАВИЛЬНЫЙ шаблон regx] не работал, заключается в том, что разные браузеры возвращали разные значения для элемента управления вводом файлов HTML.

Firefox: возвращает элементы управления выгрузкой файла. FileName {Как и ожидалось}

Internet Explorer: возвращает полный путь к файлу с диска в файл [Боль в заднице]

Chrome: возвращает поддельный путь как [C: \ FakePath \ Filename.extension]

У меня есть решение для Chrome и FF, но не для IE.

Chrome и Firefox: использовать FileUploadControlID.files [0] .fileName или FileUploadControlID.files [0] .name

IE Снова самая большая боль в заднице [кто-то предлагает решение]

Допустимое регулярное выражение для проверки как fileName, так и расширения:

/\b([a-zA-Z0-9._/s]{3,50})(?=(\.((jpg)|(gif)|(jpeg)|(png))$))/i

1.Файл должен содержать от 3 до 50 символов 2. Разрешены только файлы jpg, gif, jpeg, png

...