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

标签 javascript jquery jquery-validate

我们使用 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>

关于javascript - 设置 jQuery 验证以检查并允许空文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48116928/

相关文章:

php - jQuery Ajax - $sql 是一个对象错误

javascript - 将 validate.js 与 Twitter Bootstrap 结合使用

javascript - jQuery mobile 如何干扰我的鼠标/触摸监听 SVG 文档?

javascript - 使用下划线模板从另一个函数 jQuery 内部调用的事件不起作用

javascript - 在模式上分割字符串

c# - Aspnet MVC 4 验证十进制数

javascript - 在服务器端禁用aspxgridviews,如何在客户端处理?

javascript - 我的脚本使浏览器崩溃

javascript - 我如何通过 Knockout.JS observableArray 进行 for-each?

javascript - 将隐藏输入添加到 Stripe 表单以用作后变量