似乎在JavaScript我不能找到JavaScript的正則表達式,這將考驗以下情況:正則表達式的文件路徑驗證
- C:\ TEMP
- d:\目錄名\測試\
- \約翰 - 桌面\ TEMPDIR \
你可以看到什麼,我去了。我只需要它來驗證文件路徑。但似乎我發現的所有表達式都不適用於JavaScript。
似乎在JavaScript我不能找到JavaScript的正則表達式,這將考驗以下情況:正則表達式的文件路徑驗證
你可以看到什麼,我去了。我只需要它來驗證文件路徑。但似乎我發現的所有表達式都不適用於JavaScript。
試試這個:
([a-zA-Z]:)?(\\[a-zA-Z0-9_-]+)+\\?
編輯:
@Bart讓我想起這個正則表達式。這個應該適合windows的路徑。
^([a-zA-Z]:)?(\\[^<>:"/\\|?*]+)+\\?$
也匹配一個空字符串。另外請注意,Windows中的文件夾可能比其中的集合[[a-zA-Z0-9 _-]]多。 – 2010-01-08 20:00:15
+1,因爲當我看到其他人寫了像地雷這樣的正則表達式時,我感覺更好;畢竟我是「正常」 – 2010-01-08 20:00:36
@Bart你是對的,謝謝。我會解決它。注意:我知道,但它只是可編輯的。我寫了基本的正則表達式 - 想法很明確 – Gaim 2010-01-08 20:01:50
你可以這樣開始:
^([a-zA-Z]:)?(\\[a-zA-Z0-9_\-]+)+\\?
這所有的樣本相匹配。
這個問題是否適用於php? – eronax59 2016-07-27 10:01:58
我認爲這將工作:
var reg = new RegExp("^(?>[a-z]:)?(?>\\|/)?([^\\/?%*:|\"<>\r\n]+(?>\\|/)?)+$", "i");
我剛剛排除了所有(?)無效字符的文件名。應該使用國際文件名(我不知道)以及任何操作系統路徑類型(下面有例外)。
這是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;
}
試着讓它在單一的條件。
此檢查將失敗,路徑包含一個負號「 - 」 – Lemmy4555 2017-02-02 17:44:36
我發現這裏的例子: http://regexlib.com/Search.aspx?k=file+name&AspxAutoDetectCookieSupport=1 ,我已經修改了它匹配開始'\'
pathes:
^((([a-zA-Z]:|\\)\\)|(\\))?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$
這是明確的正則表達式轉義的版本更容易閱讀(真的! )。
它匹配pathes像:
等
你會用JS中的文件路徑嗎?通常JS不具有對本地磁盤文件系統的訪問權限。將文件路徑發送到服務器端也沒有多大意義,因爲服務器不能訪問客戶端的本地磁盤文件系統。畢竟我認爲你只需要'input type =「file」'而不用擔心驗證。 – BalusC 2010-01-09 01:06:25
BalusC,我明白這一點。我正在創建的應用程序正在處理一個數據庫服務器,它的文件路徑就是其中一個字段。爲了進行編輯,我想要進行一些驗證。即使用戶可能放置了無效的路徑,至少這將有助於確保用戶放入路徑。此外,這是一個服務器端路徑,所以input type =「file」將不起作用。謝謝。 – postalservice14 2010-01-10 09:42:12