我们正在使用jQuery validate将文件扩展名列入白名单:

$("#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 validate做到这一点。我尝试添加一个空分区:

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>

10-05 20:59
查看更多