2012-10-01 42 views
5

我需要一個本地或用戶自定義的函數來檢查字符串是否是有效的目錄名稱。 我已經瀏覽了PHP文檔,我只能找到函數is_dir,它檢查它是否是一個現有的目錄,而不是一個目錄的有效名稱。檢查字符串的有效目錄名稱

+3

定義「有效的目錄名稱」每個操作系統都有自己的限制。定義什麼是合法的,而不是,然後對此進行驗證。 –

+0

不存在的目錄將是一個無效的目錄,不是? –

+0

你可以搜索'general'目錄的正則表達式。 – Darkwater

回答

7

這應該適合你。

regex for validating folder name & file name

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { 
    /* $filename is legal; doesn't contain illegal character. */ 
} 
else { 
    /* $filename contains at least one illegal character. */ 
} 
4

這會工作。您可以根據需要修改第二個和第三個參數。

if (!mkdir($directory, 0700, true)) { 
    die('Error: Illegal directory.'); 
} 

請注意,如果目錄名稱有效,這將創建目錄。但是,以我的愚見(並且不知道你的特定用例),這是大多數語言處理檢查目錄名有效性的首選方式。只要嘗試創建目錄,如果失敗,則告訴他們失敗。

這樣做的好處是,它使代碼文件系統保持不可知性,並且它是驗證和創建目錄時最不容易出錯的方法,因爲在驗證之間沒有其他進程或線程能夠創建目錄該目錄以及何時創建它。

缺點是這種方法假定你想立即創建目錄。

當然,mkdir()可能會失敗的原因有很多(例如,權限不足,硬件故障,無效的目錄名等),所以您可能希望根據錯誤向用戶顯示不同的錯誤消息。不幸的是,PHP沒有像其他語言那樣強大的異常處理能力,但是如果您想要走這條路,您應該可以使用諸如此類answer中的方法來捕獲mkdir()可以生成的不同警告。

+0

也許你應該試試這個:''mkdir('dirname/test /../temp',0700,true);'在@GregoryBurns的答案中給出的某些東西過濾'$ directory'名稱肯定會很有用... – Wilt