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