C#でフォルダー名を検証する必要があります。
私は次の正規表現を試しました:
^(.*?/|.*?\\)?([^\./|^\.\\]+)(?:\.([^\\]*)|)$
しかし失敗し、私も使用してみGetInvalidPathChars()
ました。
P:\abc
フォルダ名として使用しようとすると失敗します。Driveletter:\foldername
誰かが理由を提案できますか?
あなたはこのようにそれをすることができます(System.IO.Path.InvalidPathChars
定数を使用して):
bool IsValidFilename(string testName)
{
Regex containsABadCharacter = new Regex("[" + Regex.Escape(System.IO.Path.InvalidPathChars) + "]");
if (containsABadCharacter.IsMatch(testName) { return false; };
// other checks for UNC, drive-path format, etc
return true;
}
[編集]
フォルダパスを検証する正規表現が必要な場合は、次の正規表現を使用できます。
Regex regex = new Regex("^([a-zA-Z]:)?(\\\\[^<>:\"/\\\\|?*]+)+\\\\?$");
[編集2]
パスが正しいかどうかを確認できるトリッキーなことを1つ覚えています。
var invalidPathChars = Path.GetInvalidPathChars(path)
または(ファイルの場合):
var invalidFileNameChars = Path.GetInvalidFileNameChars(fileName)
フォルダ名を正しく検証することは、かなりの使命です。私のブログ投稿「データバインディング、検証、MVVMを次のレベルに引き上げる-パート2 」を参照してください。
タイトルに騙されないでください。ファイルシステムパスの検証に関するものであり、.NetFrameworkで提供されるメソッドの使用に伴う複雑さのいくつかを示しています。正規表現を使用することもできますが、それはその仕事を行うための最も信頼できる方法ではありません。
これはあなたが使うべき正規表現です:
Regex regex = new Regex("^([a-zA-Z0-9][^*/><?\"|:]*)$");
if (!regex.IsMatch(txtFolderName.Text))
{
MessageBox.Show(this, "Folder fail", "info", MessageBoxButtons.OK, MessageBoxIcon.Information);
metrotxtFolderName.Focus();
}