Проверьте тип файла с помощью Foundation Abide

Я пытаюсь использовать подключаемый модуль Abide Фонда для проверки типа расширения файла, загруженного во входной тег type="file", но у меня возникают проблемы с проверкой правильности проверки RegExp.

HTML:

<div class="large-2 columns button">
    <input id="uploadResume" type="file" required pattern="resume" />
    <small class="error">PDF or Word Document only please</small>
</div>

JavaScript:

$(document)
    .foundation().foundation('abide', {
        patterns: {
        // check if the last 3 letters are acceptable
        resume: /^.(doc|DOC|pdf|PDF)*$/
    }
});

1 ответ

Решение

Сейчас вы пытаетесь сопоставить любой символ, за которым следуют упомянутые расширения, поэтому попробуйте этот шаблон:

ШАБЛОН

/\.(doc|DOC|pdf|PDF)$/

Он будет соответствовать только точке, за которой следует любое из упомянутых расширений, поэтому возможны следующие варианты:

.doc
.DOC
.pdf
.PDF

Но если вы хотите сопоставить все имя файла + расширение, используйте это:

ШАБЛОН

/^.+?\.(doc|DOC|pdf|PDF)$/

добавленной .+? после ^ что означает "соответствовать любому символу, кроме новой строки 0 или более раз, пока не будет удовлетворен следующий токен", также добавлено \. соответствовать точке перед расширением. Я тоже убрал * который не нужен и будет вызывать повторяющиеся расширения.

Примеры

filename.PDF

Этот файл будет соответствовать.

filename.exe

Это не будет соответствовать.

ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ

Используя 2-й шаблон в качестве встроенного шаблона:

<input type="file" required pattern="^.+?\.(doc|DOC|pdf|PDF)$" />.

Очевидно, что при использовании встроенных шаблонов возникает некоторая проблема, которая заставляет вас удалять прямые косые черты как в начале, так и в конце шаблона. Кроме того, названные шаблоны, кажется, работают странно, и я не уверен, почему это так.

Другие вопросы по тегам