使用Javascript检测字符串中的一些保留字符

时间:2011-01-13 18:58:59

标签: javascript jquery regex detection character

我有一个上传MP3文件的表格的文件输入,但我想在文件名中检测我的系统中的保留字符,比如! @或任何其他。

我找到的所有代码都替换了这些字符,但我只想检测它们以提醒用户。我认为使用正则表达式会很容易,但我不知道它们。

我正在使用JQuery / Javascript。

编辑以改善我的问题描述:

我在CodeIgniter应用程序中工作,允许用户将MP3文件上传到服务器。我使用jQuery来管理客户端表单。 CI上传类将文件名中的空格转换为下划线,一切正常。但是在测试应用程序时,我上传了一个带有(!)名字的MP3文件,我遇到了麻烦。

我只是想在上传文件之前插入一个javascript条件,以评估用户的文件名是否包含(!)(或其他任何我想稍后添加的文件)以请求重命名文件确实如此。

2 个答案:

答案 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
}