因此,我试图做一个图像验证器与JavaScript的输入[类型=“文件”]。但与其他验证,它的工作完美。每次我模糊输入值时,它总是一遍又一遍地返回false和true。我的目标是有一个好的输入验证。
//Image Validator
const ImageExp = new RegExp(/.*\.(jpe?g|png|)$/igm)
function ValidaImagem(x) {
if (ImageExp.test(x.value) == true) {
console.log(true);
x.style.background = "#0F0";
return true;
} else {
console.log(false);
x.style.background = "#F00";
return false;
}
}
document.getElementById("Photo").addEventListener("blur", function() {
ValidaImagem(document.getElementById("Photo"))
})
document.getElementById("Submit-btn").addEventListener("click", function() {
ValidaImagem(document.getElementById("Photo"))
})
<input type="file" accept="image/*" id="Photo" name="" class="form-control" />
<button id="Submit-btn">Submit</button>
2条答案
按热度按时间hgtggwj01#
图像验证函数测试文件输入的value属性。但是,输入类型文件的值将给予文件名,而不是内容或文件类型。因此,正则表达式是根据文件名而不是文件类型来测试的。如果您始终信任用户正确标记他们的文件类型,这可能会起作用,但它不是万无一失的,也不会验证文件的实际内容。您可以通过更改Regex来匹配文件的MIME类型来解决此问题,如下所示:
使用此方法,您可以首先捕获提交的内容,然后根据
file.type
值进行匹配和测试。它将您的验证程序更改为:HTML和CSS中的其他内容都可以保持不变。
您可以在这里了解更多关于MIME类型的信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
请注意这一特定部分:
"Warning: Browsers use the MIME type, not the file extension, to determine how to process a URL, so it's important that web servers send the correct MIME type in the response's Content-Type header. If this is not correctly configured, browsers are likely to misinterpret the contents of files, sites will not work correctly, and downloaded files may be mishandled"
b1zrtrql2#
如果目标只是在选择了图像的情况下提交表单,那么只需像之前一样设置
accept
属性和required
属性就足够了。