在jquery中没有正确检查文件扩展名的验证



我已经为扩展名为.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字符串

相关内容

  • 没有找到相关文章

最新更新