在PHP中,我从用户那里接收一个本地文件目录的字符串$path
我想知道他们是否包含了尾部斜杠(/)。我希望这个代码可以跨平台使用,所以我想使用PHP常量DIRECTORY_SEPARATOR
我的失败尝试包括尝试执行preg_match,例如:
preg_match("/" . DIRECTORY_SEPARATOR . "$/", $path);
我基本上只想要一种优雅的方法来测试字符串是否以 DIRECTORY_SEPARATOR
结尾。
在PHP中,我从用户那里接收一个本地文件目录的字符串$path
我想知道他们是否包含了尾部斜杠(/)。我希望这个代码可以跨平台使用,所以我想使用PHP常量DIRECTORY_SEPARATOR
我的失败尝试包括尝试执行preg_match,例如:
preg_match("/" . DIRECTORY_SEPARATOR . "$/", $path);
我基本上只想要一种优雅的方法来测试字符串是否以 DIRECTORY_SEPARATOR
结尾。
为修复您的正则表达式:
preg_match("/" . preg_quote(DIRECTORY_SEPARATOR) . "$/", $path);
但是可能有更简单的方法来实现你的目标:
rtrim($path,DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
一个简单的 substr($path,-1)==DIRECTORY_SEPARATOR
有什么问题吗?
$sepPresent = $path{strlen($path) - 1} == DIRECTORY_SEPARATOR ? true : false;
......这将比正则表达式更有效。但是,如果DIRECTORY_SEPARATOR不是单个字符,则会失败。
substr($path,-1)
比$path{strlen($path) - 1}
更高效。 - mvds也可以使用数组访问符号
$endsInDS = $str[strlen($str)-1] === DIRECTORY_SEPARATOR;
我认为,根据平台的不同,你可能会在第一个参数上得到一个无效的正则表达式。
你的解决方案设计优雅,代码写得很好。但请记住,目录分隔符通常是特殊字符。它可能需要一些转义。
编辑 #1 我喜欢这个提出的解决方案。
$sepPresent = $path{strlen($path) - 1} == DIRECTORY_SEPARATOR ? true : false;
为了解决这个问题,我建议:
$sepPresent = $path{strlen($path) - strlen(DIRECTORY_SEPARATOR)} === DIRECTORY_SEPARATOR ? true : false;
$path{..}
只获取1个字符。最好使用substr($path,-strlen(DIRECTORY_SEPARATOR))
。 - mvds
/
作为正则表达式的分隔符,但实际上,谁知道未来几年会发明出什么 DIRECTORY_SEPARATOR... - mvds\\
,就像在命名空间中一样,而且之前没有人使用过它...哦...等一下... - Marc B