用循环替换无效字符集?或者可能是正则表达式?

问题描述 投票:-2回答:1

我有一长串替换语句来摆脱文件名中的以下字符(来自C#源代码):

RealInvalidPathChars = { '\"', '<', '>', '|', '\0', (Char)1, (Char)2, (Char)3, (Char)4, (Char)5,
    (Char)6, (Char)7, (Char)8, (Char)9, (Char)10, (Char)11, (Char)12, (Char)13, (Char)14, (Char)15,
    (Char)16, (Char)17, (Char)18, (Char)19, (Char)20, (Char)21, (Char)22, (Char)23, (Char)24, (Char)25,
    (Char)26, (Char)27, (Char)28, (Char)29, (Char)30, (Char)31 };

“哑”JS看起来像这样:

var r = s.replace('\u0001','_').replace('\u0002', '_') ....etc...;

是否有JS方法迭代替换循环中的这些特殊字符?或者是否有正则表达式可用于处理'\u00xx'字符(我从来没有见过这样做)?这个C#定义范围中的第一个字符是'\u0001',最后一个字符是'\u001f'

javascript regex
1个回答
1
投票

JavaScript :(我没有检查语法,但这样的东西应该适用于JS)

for (var i = 0; i < RealInvalidPathChars.length ; i++) {
    s = s.replace(RealInvalidPathChars[i], '_');
}

C#:我使用这段代码:

    public static string GetValidFileName(string fileName, char replacementCharForInvalidChars = '_', int maxLength = 120, string defaultExtention = "", string defaultFileNameIfFilenameIsInvalid = "_") {
        if (string.IsNullOrWhiteSpace(fileName)) return defaultFileNameIfFilenameIsInvalid;
        var ret = fileName.Trim();
        foreach (var invalidFileNameChar in Path.GetInvalidFileNameChars()) {
            ret = ret.Replace(invalidFileNameChar, replacementCharForInvalidChars);
        }
        var newfileName = Path.GetFileNameWithoutExtension(ret);
        if (string.IsNullOrWhiteSpace(newfileName)) newfileName = defaultFileNameIfFilenameIsInvalid;
        var newExtention = Path.GetExtension(ret);
        if (string.IsNullOrWhiteSpace(newExtention)) newExtention = defaultExtention;

        if (newfileName.Length + newExtention.Length > maxLength) {
            if (newExtention.Length > maxLength - (maxLength / 10)) {
                //Ensure a minimum length of the FileName and cut Extention - which is probably not a real File Extention
                newfileName = Left(newfileName, maxLength / 10);
                newExtention = Left(newExtention, maxLength - newfileName.Length);
            } else {
                newfileName = Left(newfileName, maxLength - newExtention.Length);
            }
        }
        ret = newfileName + newExtention;

        return ret;
    }

也许这对你来说已经足够了:

    foreach (var invalidFileNameChar in Path.GetInvalidFileNameChars()) {
        fileName = fileName.Replace(invalidFileNameChar, '_');
    }
© www.soinside.com 2019 - 2024. All rights reserved.