我已经为扩展名为.xls
和.xlsx
的例外文件编写了一个验证,下面是代码。
function isFileValid() {
var allowedFiles = [".xlsx", ".xls"];
// var allowedFiles = [".xls"];
var fileUpload = document.getElementById("MainContent_fluploadData");
var fileChanged = fileUpload.value !== window.lastUploadedFilename;
window.lastUploadedFilename = fileUpload.value;
var regex = new RegExp("([a-zA-Z0-9s_\.-:])+(" + allowedFiles.join('|') + ")$");
if (!regex.test(fileUpload.value.toLowerCase()) && fileUpload.value !== '') {
alert("Please upload files having extensions: " + allowedFiles.join(', ') + " only.");
$('#MainContent_fluploadData').val('');
return false;
}
}
因此,即使我正在上传有效的excel文件,其名称如下:-SITE_ADDITION (1).xlsx
请提出建议。
<html>
<head>
<title>Validation for file extension is not checking properly in jquery</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<input type="file" name="file_input" id="file_input">
<script>
$("#file_input").change(function () {
var fileExtension = ['xlsx', 'xls'];
if ($.inArray($(this).val().split('.').pop().toLowerCase(), fileExtension) == -1){
alert("Invalid file type");
$(this).val('');
return false;
}
});
</script>
</body>
</html>
如果您正在寻找regEx,请为您的代码使用下面的regEx。
var regEx = new RegExp("^.*.xls[xm]?$");//reg ex for excel file
console.log(regEx.test("abc.xlsx"));// true
console.log(regEx.test("abc.xls"));//true
console.log(regEx.test("abc.xlsm"));//true
console.log(regEx.test("abc.xlst"));//false
console.log(regEx.test("abc.doc"));//false
console.log(regEx.test("SITE_ADDITION (1).xlsx"));//true
如果您只关心扩展,请使用以下内容:
function isFileValid() {
var allowedFiles = [".xlsx", ".xls"];
var fileUpload = document.getElementById("MainContent_fluploadData");
window.lastUploadedFilename = fileUpload.value;
var regex = new RegExp('\.(' + allowedFiles.join('|') + ')$', 'i');
if (!regex.test(fileUpload.value)) {
alert("Please upload files having extensions: " + allowedFiles.join(', ') + " only.");
$('#MainContent_fluploadData').val('');
return false;
}
}
注:
- 如果您不关心文件名中的字符,则不需要检查导致
.
的字符,只要不在开头锚定正则表达式即可 '\.('
-如果您定义了一个字符串并希望有一个字面反斜杠,则需要对其进行转义:\
- 换句话说,字符串定义
'\.('
在内存中变为.(
- 换句话说,字符串定义
RegExp
构造函数的第二个参数表示不区分大小写
另一方面,如果您想限制文件名中的字符,请使用以下命令:
function isFileValid() {
var allowedFiles = [".xlsx", ".xls"];
var fileUpload = document.getElementById("MainContent_fluploadData");
window.lastUploadedFilename = fileUpload.value;
var regex = new RegExp('^[a-z0-9\s_\.\-:\(\)]+\.(' + allowedFiles.join('|') + ')$', 'i');
if (!regex.test(fileUpload.value)) {
alert("Please upload file with only A-Z, 0-9, space, dot, dash, :, () in name, and extension: " + allowedFiles.join(', '));
$('#MainContent_fluploadData').val('');
return false;
}
}
注:
- 正则表达式需要锚定在
^
的开头 - 根据需要为允许的字符调整字符类
- 另一方面,如果您的文件名中必须有完整的路径名,则以:
'[\/\\][a-z0-9...
开始regex字符串