设置 jQuery 验证以检查并允许空文件扩展名

Set the jQuery validate to check for and allow empty file extensions

我们正在使用 jQuery 验证将文件上传的文件扩展名列入白名单:

$("#new-job-form").validate({
    focusCleanup: true,
    focusInvalid: false,
    ignore: [],
    rules: {
        jobServices: "required",
        file: {
            required: true,
            filesize: maxFileSize,
            extension: '.tsv|.txt|.csv|.psv|.xls|.xlsx|.zip|.7z|.rar'
        }
    }
});

这很好用。但是,新的要求是接受根本没有扩展名的文件,我不知道如何通过 JQuery 验证来做到这一点。我尝试添加一个空分区:

extension: '.txt|.csv|.xls|.xlsx|.zip|.7z|.rar||'

但这仍然拒绝没有扩展名的文件。

有没有办法配置模块以接受没有扩展名的文件?

我建议您创建自己的规则;与扩展相同的规则,但添加检查文件名是否不包含点,

value.indexOf('.') == -1;

请参阅以下代码段:

//adding extensionempty rule 
$.validator.addMethod("extensionempty", function(value, element, param) {

  param = typeof param === "string" ? param.replace(/,/g, "|") : "png|jpe?g|gif";
  console.log(value, param);
  return this.optional(element) || value.match(new RegExp("\.(" + param + ")$", "i")) || value.indexOf('.') == -1;
}, $.validator.format("Please enter a value with a valid extension."));





$("#new-job-form").validate({
  focusCleanup: true,
  focusInvalid: false,
  ignore: [],
  rules: {
    file: {
      required: true,
      extensionempty: 'tsv|txt|csv|psv|xls|xlsx|zip|7z|rar'
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/additional-methods.js"></script>

<form id="new-job-form">
  <label for="file">.tsv|.txt|.csv|.psv|.xls|.xlsx|.zip|.7z|.rar  files allowed: </label>
  <input type="file" id="file" name="file">
  <br/>
  <input type="submit" value="Validate!">
</form>