2017-12-15 20 views
-2

私は(C#ソースコードから)置き換え文ファイル名に以下の文字を取り除くための長いセット持っている:無効な文字セットをループに置き換えますか?またはおそらく正規表現?

var r = s.replace('\u0001','_').replace('\u0002', '_') ....etc...; 
:「ダム」JSは、次のようになります

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方法はありますか?または、正規表現を使用して'\u00xx'文字を扱うことができますか(これは決して行われたことはありません)?このC#で定義された範囲の最初の文字は'\u0001'で、最後は'\u001f'です。

+0

'[all_of_your_characters_here] +'という文字クラスを使用してください。これは、例えば、 '_'。 – Jan

+0

なぜあなたはこれをやっていますか?無効な文字の削除[有効なファイル名を作成しません](https://stackoverflow.com/a/1976050/22437)。 –

+0

私はSystem.ArgumentExceptionの発生を防ぐために "パス内の不正な文字"を試みています。 – JacobIRR

答えて

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; 
    } 

多分これはあなたのためのenoughtです。

foreach (var invalidFileNameChar in Path.GetInvalidFileNameChars()) { 
     fileName = fileName.Replace(invalidFileNameChar, '_'); 
    } 
+0

明らかにJavascriptで回答が必要 – NetMage

関連する問題