7

C#でフォルダー名を検証する必要があります。

私は次の正規表現を試しました:

 ^(.*?/|.*?\\)?([^\./|^\.\\]+)(?:\.([^\\]*)|)$

しかし失敗し、私も使用してみGetInvalidPathChars()ました。

P:\abcフォルダ名として使用しようとすると失敗します。Driveletter:\foldername

誰かが理由を提案できますか?

4

3 に答える 3

16

あなたはこのようにそれをすることができます(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)

于 2012-10-02T11:00:32.060 に答える
1

フォルダ名を正しく検証することは、かなりの使命です。私のブログ投稿「データバインディング、検証、MVVMを次のレベルに引き上げる-パート2 」を参照してください。
タイトルに騙されないでください。ファイルシステムパスの検証に関するものであり、.NetFrameworkで提供されるメソッドの使用に伴う複雑さのいくつかを示しています。正規表現を使用することもできますが、それはその仕事を行うための最も信頼できる方法ではありません。

于 2012-10-02T11:13:41.483 に答える
1

これはあなたが使うべき正規表現です:

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();
}
于 2013-12-17T08:28:54.333 に答える