jQuery文件扩展名验证失效:带括号的有效Excel文件无法通过
问题解决:含括号的Excel文件上传验证失败
你的验证代码失败的原因是正则表达式允许的字符集合未包含括号(和),导致带这类符号的文件名无法通过匹配。
方案一:修正正则表达式
在正则的允许字符集中添加(和)即可解决问题,修改后的代码如下:
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-9\s_\\.\-:()])+(" + allowedFiles.join('|') + ")$"); if (!regex.test(fileUpload.value.toLowerCase()) && fileUpload.value !== '') { alert("Please upload files having extensions: " + allowedFiles.join(', ') + " only."); $('#MainContent_fluploadData').val(''); return false; } }
如果后续需要支持其他特殊字符(如@、&等),直接将对应字符添加到正则的字符集合中即可。
方案二:直接提取文件后缀验证(更健壮)
正则匹配文件名容易遗漏特殊字符,换一种思路:直接提取文件后缀进行校验,无需关心文件名内容,代码更简洁可靠:
function isFileValid() { var allowedFiles = [".xlsx", ".xls"]; var fileUpload = document.getElementById("MainContent_fluploadData"); var fileChanged = fileUpload.value !== window.lastUploadedFilename; window.lastUploadedFilename = fileUpload.value; if (fileUpload.value === '') return; // 提取文件后缀(转换为小写) const fileExtension = fileUpload.value.toLowerCase().substring(fileUpload.value.lastIndexOf('.')); if (!allowedFiles.includes(fileExtension)) { alert("Please upload files having extensions: " + allowedFiles.join(', ') + " only."); $('#MainContent_fluploadData').val(''); return false; } }
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

