【问题标题】:Check for Invalid characters(Special Characters & International character) in file name without validating file path检查文件名中的无效字符(特殊字符和国际字符)而不验证文件路径
【发布时间】:2018-05-30 16:54:10
【问题描述】:

我正在尝试验证文件名中包含无效字符的文件名,而不验证文件路径。我尝试了各种组合,但我的 javascript 函数似乎都没有奏效。

 @Html.TextBoxFor(model => model.Attachment, new { type = "file" , onchange = "ValidateFileName(this)" })

JS:

function ValidateFileName(name) {
        if (name.value.match(/\.\.[a-z][a-z][a-z]$/) || name.value.match(/\.\.[a-z][a-z][a-z][a-z]$/) || name.value.match(/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:%<>/$"]*[^\.\|\*\?\\:%<>/$"]+$/)) {

            alert('Invalid file extension.');
            name.form.reset();
            name.focus();
            return false;
        }
    }

【问题讨论】:

    标签: javascript c# file-upload filenames invalid-characters


    【解决方案1】:

    这是我通常用来验证 Windows 文件名的正则表达式:

    ^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\";|/]+$
    

    但如果您的 name 变量包含文件路径,您首先必须使用以下方法从中提取文件名:

    var filename = name.split(/(\\|\/)/g).pop();
    

    或:

    var name_pieces = name.split('\\');
    var filename = name_pieces[name_pieces.length - 1];
    

    附带说明,请仔细检查这部分代码的行为:

    onchange = "ValidateFileName(this)"
    

    因为我觉得有什么不对劲...我不知道,但总有一些东西告诉我应该写成:

    onchange = "ValidateFileName(this.value)"
    

    【讨论】:

    • 从文件名中分割路径是我所缺少的。谢谢 !现在可以了。还回答你关于 this.value 的问题,因为我的 JS 函数实际上检查了 parameter.value 我没有传入 this.value。
    【解决方案2】:

    在 .NET 中,您可以使用 Path.GetInvalidFileNameChars() 静态方法来获取无效字符列表。 (注:文件路径字符也有Path.GetInvalidPathChar(),不同)。

    在服务器端,您可以这样做:

    var invalidChars = Path.GetInvalidFileNameChars();
    var hasBadChars = filename.Any(c =>  invalidChars.Contains(c));
    

    对于 JS 端,您可以将 invalidChars 输出到 JS 数组服务器端,然后执行以下操作:

    if (invalidChars.some(function(v) { return filename.indexOf(v) >= 0; })) {
        // There's at least one
    }
    

    【讨论】:

    • 我了解它的服务器端。但是你能告诉我如何实现 JS 部分吗?我只是想重置文件字段并显示有无效字符的警报。
    猜你喜欢
    • 2016-10-10
    • 2018-07-08
    • 2011-12-08
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多