我有一长串替换语句来摆脱文件名中的以下字符(来自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 :(我没有检查语法,但这样的东西应该适用于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, '_');
}