我有一个上传MP3文件的表格的文件输入,但我想在文件名中检测我的系统中的保留字符,比如! @或任何其他。
我找到的所有代码都替换了这些字符,但我只想检测它们以提醒用户。我认为使用正则表达式会很容易,但我不知道它们。
我正在使用JQuery / Javascript。
编辑以改善我的问题描述:
我在CodeIgniter应用程序中工作,允许用户将MP3文件上传到服务器。我使用jQuery来管理客户端表单。 CI上传类将文件名中的空格转换为下划线,一切正常。但是在测试应用程序时,我上传了一个带有(!)名字的MP3文件,我遇到了麻烦。
我只是想在上传文件之前插入一个javascript条件,以评估用户的文件名是否包含(!)(或其他任何我想稍后添加的文件)以请求重命名文件确实如此。
答案 0 :(得分:3)
考虑不要阻止任何字符。对于用户而言,这只是一个麻烦,在具有奇怪路径字符的异国情调系统上,您最终可能不会让用户上传任何内容。
让用户上传文件,并以URI编码形式将文件名存储在服务器上(在PHP中,urlencode()
将是正确的功能)。这使文件名与您的操作系统兼容,并允许用户在重新下载文件时保留其中的任何特殊字符。
答案 1 :(得分:1)
执行此操作的一种方法是将输入字段的实际值与encodeURIComponent
编码的字段进行比较。如果它们相同,则文件名是安全的。
但请注意,浏览器可能根本不会报告任何文件名。如果没有返回值,我的插件会通过返回true
来响应此操作。当然,这可能意味着没有设定任何价值。
jQuery插件:
(function($) {
$.fn.fileNameIsValid = function() {
var val = this[0].value.replace('C:\\fakepath\\', '');
return !val || encodeURIComponent(val) === val;
}
}(jQuery));
然后您可以这样调用:
if ($('#yourFileInput').fileNameIsValid()) {
// filename validates
}