css 每次在真与假之间变化的输入是模糊的

q7solyqu  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(137)

因此,我试图做一个图像验证器与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>
hgtggwj0

hgtggwj01#

图像验证函数测试文件输入的value属性。但是,输入类型文件的值将给予文件名,而不是内容或文件类型。因此,正则表达式是根据文件名而不是文件类型来测试的。如果您始终信任用户正确标记他们的文件类型,这可能会起作用,但它不是万无一失的,也不会验证文件的实际内容。您可以通过更改Regex来匹配文件的MIME类型来解决此问题,如下所示:

const ImageExp = new RegExp(/image\/(jpe?g|png)/i)

使用此方法,您可以首先捕获提交的内容,然后根据file.type值进行匹配和测试。它将您的验证程序更改为:

function ValidaImagem(inputElement) {
   let file = inputElement.files[0]; 

   if (file && ImageExp.test(file.type)) {
      console.log(true);
      inputElement.style.background = "#0F0";
      return true;
   } else {
      console.log(false);
      inputElement.style.background = "#F00";
      return false;
   }
}

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"

b1zrtrql

b1zrtrql2#

如果目标只是在选择了图像的情况下提交表单,那么只需像之前一样设置accept属性和required属性就足够了。

document.forms.form01.addEventListener('submit', e => {
  e.preventDefault();
  console.log('We have an image!');
});
input:valid {
  background-color: orange;
}
<form name="form01">
  <input type="file" accept="image/*" name="photo" required />
  <button type="submit">Submit</button>
</form>

相关问题