代码之家  ›  专栏  ›  技术社区  ›  Bob Tway

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

  •  0
  • Bob Tway  · 技术社区  · 6 年前

    我们正在使用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'
            }
        }
    });
    

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

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

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

    是否有方法将模块配置为接受没有扩展名的文件?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bourbia Brahim    6 年前

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

    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>