php 正则匹配所有路径,与文件路径匹配的PHP正则表达式

请注意,可能有多种类型的文件路径。

例如:

“/”

“……”

“……”(是,这可以是文件名)

“文件/文件.txt”

“文件/文件”

“文件.txt”

“文件/././/file/file/file”

“/file/../../file/file/.file”(Unix)

“C:\Windows\”(Windows)

“c:\windows\asd/asd”(windows,php接受此项)

“file/../..///file/file/file!“@ $”

“file/../..///file/file/file!@#.php.php.php.pdf.php“

所有这些文件路径都有效。我想不出一个简单的正则表达式能使它完美。

现在假设它只是一个Unix路径,这是我认为在大多数情况下应该适用的方法:

preg_match('/^[^*?"<>|:]*$/',$path)

它检查所有字符串的^,*,?,,,,:(为Windows删除此项)。这些都是Windows不允许与/和一起使用的文件名字符。

如果是Windows,您应该用/替换路径的\,然后分解它并检查它是否是绝对路径。下面是一个同时在UNIX和Windows中工作的示例。

function is_filepath($path)

{

$path = trim($path);

if(preg_match('/^[^*?"<>|:]*$/',$path)) return true; // good to go

if(!defined('WINDOWS_SERVER'))

{

$tmp = dirname(__FILE__);

if (strpos($tmp, '/', 0)!==false) define('WINDOWS_SERVER', false);

else define('WINDOWS_SERVER', true);

}

/*first, we need to check if the system is windows*/

if(WINDOWS_SERVER)

{

if(strpos($path, ":") == 1 && preg_match('/[a-zA-Z]/', $path[0])) // check if it's something like C:\

{

$tmp = substr($path,2);

$bool = preg_match('/^[^*?"<>|:]*$/',$tmp);

return ($bool == 1); // so that it will return only true and false

}

return false;

}

//else // else is not needed

return false; // that t

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值