6

次のケースをテストする JavaScript の正規表現が見つからないようです。

  • c:\temp
  • D:\ディレクトリ名\testing\
  • \john-desktop\tempdir\

あなたは私が何をしようとしているのかを見ることができます。ファイルパスを検証するために必要です。しかし、私が見つけた式はすべて JavaScript では機能しないようです。

4

5 に答える 5

4

Windows パスの検証は次のとおりです。すべての Windows パス ルールで正常に機能します。

var contPathWin = document.editConf.containerPathWin.value;

if(contPathWin=="" || !windowsPathValidation(contPathWin))
{
    alert("please enter valid path");
    return false;
}

function windowsPathValidation(contwinpath)
{
    if((contwinpath.charAt(0) != "\\" || contwinpath.charAt(1) != "\\") || (contwinpath.charAt(0) != "/" || contwinpath.charAt(1) != "/"))
    {
       if(!contwinpath.charAt(0).match(/^[a-zA-Z]/))  
       {
            return false;
       }
       if(!contwinpath.charAt(1).match(/^[:]/) || !contwinpath.charAt(2).match(/^[\/\\]/))
       {
           return false;
       } 

}

これはLinuxパスの検証用です。

var contPathLinux = document.addSvmEncryption.containerPathLinux.value;

if(contPathLinux=="" || !linuxPathValidation(contPathLinux))
{
    alert("please enter valid path");
    return false;
}

function linuxPathValidation(contPathLinux)
{
    for(var k=0;k<contPathLinux.length;k++){
        if(contPathLinux.charAt(k).match(/^[\\]$/) ){
            return false;
        }
    }
    if(contPathLinux.charAt(0) != "/")
    {
        return false;
    }
    if(contPathLinux.charAt(0) == "/" && contPathLinux.charAt(1) == "/")
    {
        return false;
    }
    return true;
}

単一の状態で作成してみてください。

于 2012-01-05T06:25:10.303 に答える
2

これを試して:

([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?

編集:

@Bart は、この正規表現について考えさせてくれました。これは、ウィンドウのパスに適しています。

^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
于 2010-01-08T19:57:24.723 に答える
1

ここで例を見つけました: http://regexlib.com/Search.aspx?k=file+name&AspxAutoDetectCookieSupport=1 で始まるパスに一致するように変更しました'\':

^((([a-zA-Z]:|\\)\\)|(\\))?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$

これは、clear-regex のエスケープされていないバージョンで、読みやすくなっています (本当に!)。

次のようなパスに一致します。

  • c:\temp
  • \temp
  • ..\マイ フォルダ
  • ウオア

于 2012-12-07T09:32:33.383 に答える
1

私はこれがうまくいくと思います:

var reg = new RegExp("^(?>[a-z]:)?(?>\\|/)?([^\\/?%*:|\"<>\r\n]+(?>\\|/)?)+$", "i");

ファイル名から無効な文字( ? )をすべて除外しました。国際的なファイル名 (私にはわかりません) および任意の OS パス タイプ (以下に示す例外を除く) で動作するはずです。

于 2010-01-08T20:06:51.690 に答える
0

あなたはから始めることができます:

^([a-zA-Z]:)?(\\[a-zA-Z0-9_\-]+)+\\?

これはすべてのサンプルに一致します。

于 2010-01-08T19:59:06.433 に答える