700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php 正则匹配所有路径 与文件路径匹配的PHP正则表达式

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

时间:2020-10-24 20:34:49

相关推荐

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

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。