2012-10-02 8 views
6

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

私は、次の正規表現しようとしている:

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

を、それは失敗し、私もGetInvalidPathChars()を使用してみました。

私は誰もが、なぜお勧めできDriveletter:\foldername

すなわちフォルダ名としてP:\abcを使用しようとすると、それが失敗しましたか?

+0

だから、正規表現の検証のドライブ文字が+ –

+0

質問FOLDERNAMEすることができますどのような状況では、ユーザーが手動でそれはRegexしなければならないので、特定のパスを入力する必要が起こっているの? – Amicable

+0

Windowsでは、特定の 'デバイス名'も 'COM1'や 'AUX'のように予約されています –

答えて

9

あなたは(System.IO.Path.InvalidPathChars定数を使用して)このような方法でそれを行うことができます:あなたはフォルダのパスを検証する正規表現をしたい場合、あなたはこの1つを使用することができ

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 invalidFileNameChars = Path.GetInvalidFileNameChars(fileName)

+0

これはドライブ文字を考慮に入れているので失敗します –

+0

'P:\ foldername'を正しいフォルダ名? – Nickon

+0

はい、失敗します。正規表現は、正規表現ではありません –

0

正しくフォルダ名を検証することができます:(ファイル用)

var invalidPathChars = Path.GetInvalidPathChars(path)

かをかなりの使命。私のブログ投稿Taking data binding, validation and MVVM to the next level - part 2を参照してください。
タイトルに惑わされることなく、ファイルシステムのパスを検証すること、そして.Netフレームワークで提供されるメソッドの使用に伴う複雑さのいくつかを示しています。正規表現を使用したいかもしれませんが、それは仕事をする最も信頼できる方法ではありません。

-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(); 
} 
関連する問題