JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/parsley.js/2.2.0-rc1/parsley.min.js"></script>
<form id="js-file-validation-example">
<input type="file" data-parsley-filemaxmegabytes="2" data-parsley-trigger="change" data-parsley-filemimetypes="image/jpeg, image/png" />
<input type="submit" />
</form>
JavaScript
var app = app || {};
// Utils
(function ($, app) {
'use strict';
app.utils = {};
app.utils.formDataSuppoerted = (function () {
return !!('FormData' in window);
}());
}(jQuery, app));
// Parsley validators
(function ($, app) {
'use strict';
window.Parsley
.addValidator('filemaxmegabytes', {
requirementType: 'string',
validateString: function (value, requirement, parsleyInstance) {
if (!app.utils.formDataSuppoerted) {
return true;
}
var file = parsleyInstance.$element[0].files;
var maxBytes = requirement * 1048576;
if (file.length == 0) {
return true;
}
return file.length === 1 && file[0].size <= maxBytes;
},
messages: {
en: 'File is to big'
}
})
.addValidator('filemimetypes', {
requirementType: 'string',
validateString: function (value, requirement, parsleyInstance) {
if (!app.utils.formDataSuppoerted) {
return true;
}
var file = parsleyInstance.$element[0].files;
if (file.length == 0) {
return true;
}
var allowedMimeTypes = requirement.replace(/\s/g, "").split(',');
return allowedMimeTypes.indexOf(file[0].type) !== -1;
},
messages: {
en: 'File mime type not allowed'
}
});
}(jQuery, app));
// Parsley Init
(function ($, app) {
'use strict';
$('#js-file-validation-example').parsley();
}(jQuery, app));