2012-10-01 40 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