Javascript 是否用循环替换无效字符集?或者可能是正则表达式?
我有一长串replace语句来去除文件名中的以下字符(来自C#源代码): 有没有一种JS方法可以迭代地替换循环中的这些特殊字符?或者是否有一个正则表达式可以用来处理Javascript 是否用循环替换无效字符集?或者可能是正则表达式?,javascript,regex,Javascript,Regex,我有一长串replace语句来去除文件名中的以下字符(来自C#源代码): 有没有一种JS方法可以迭代地替换循环中的这些特殊字符?或者是否有一个正则表达式可以用来处理'\u00xx'字符(我从未见过这样做)?这个C定义范围中的第一个字符是'\u0001',最后一个字符是'\u001f'JavaScript:(我没有检查语法,但类似的东西应该适用于JS) 也许这对你来说足够了: foreach (var invalidFileNameChar in Path.GetInvalidFileNa
'\u00xx'
字符(我从未见过这样做)?这个C定义范围中的第一个字符是'\u0001'
,最后一个字符是'\u001f'
JavaScript:(我没有检查语法,但类似的东西应该适用于JS)
也许这对你来说足够了:
foreach (var invalidFileNameChar in Path.GetInvalidFileNameChars()) {
fileName = fileName.Replace(invalidFileNameChar, '_');
}
使用字符类:
[此处的所有字符]+
。这需要替换为例如。
。您为什么要这样做?删除无效字符。我只是试图阻止System.ArgumentException“路径中的非法字符”的引发。如果这就是您试图做的所有事情,那么在C#端执行此操作,并根据path.GetInvalidFileNameChars()
返回的内容进行删除。以后,请更明确地回答您的问题和标记。我已经删除了C#标记,因为这与C#无关,因为它正在寻找一个JavaScript解决方案
var r = s.replace('\u0001','_').replace('\u0002', '_') ....etc...;
for (var i = 0; i < RealInvalidPathChars.length ; i++) {
s = s.replace(RealInvalidPathChars[i], '_');
}
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, '_');
}