次のケースをテストする JavaScript の正規表現が見つからないようです。
- c:\temp
- D:\ディレクトリ名\testing\
- \john-desktop\tempdir\
あなたは私が何をしようとしているのかを見ることができます。ファイルパスを検証するために必要です。しかし、私が見つけた式はすべて JavaScript では機能しないようです。
次のケースをテストする JavaScript の正規表現が見つからないようです。
あなたは私が何をしようとしているのかを見ることができます。ファイルパスを検証するために必要です。しかし、私が見つけた式はすべて JavaScript では機能しないようです。
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;
}
単一の状態で作成してみてください。
これを試して:
([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?
編集:
@Bart は、この正規表現について考えさせてくれました。これは、ウィンドウのパスに適しています。
^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
ここで例を見つけました:
http://regexlib.com/Search.aspx?k=file+name&AspxAutoDetectCookieSupport=1
で始まるパスに一致するように変更しました'\'
:
^((([a-zA-Z]:|\\)\\)|(\\))?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$
これは、clear-regex のエスケープされていないバージョンで、読みやすくなっています (本当に!)。
次のようなパスに一致します。
等
私はこれがうまくいくと思います:
var reg = new RegExp("^(?>[a-z]:)?(?>\\|/)?([^\\/?%*:|\"<>\r\n]+(?>\\|/)?)+$", "i");
ファイル名から無効な文字( ? )をすべて除外しました。国際的なファイル名 (私にはわかりません) および任意の OS パス タイプ (以下に示す例外を除く) で動作するはずです。
あなたはから始めることができます:
^([a-zA-Z]:)?(\\[a-zA-Z0-9_\-]+)+\\?
これはすべてのサンプルに一致します。