Проверьте, заканчивается ли путь к каталогу РАЗДЕЛИТЕЛЕМ КАТАЛОГОВ
В PHP я получаю строку от пользователя для локального каталога файлов $path
Я хочу знать, включили ли они завершающую косую черту (/) или нет. Я бы хотел, чтобы это было кроссплатформенным, поэтому я хотел бы использовать константу PHP DIRECTORY_SEPARATOR
Мои неудачные попытки включают попытку выполнить preg_match, например
preg_match("/" . DIRECTORY_SEPARATOR . "$/", $path);
Я в основном просто хочу элегантный способ проверить, заканчивается ли строка на DIRECTORY_SEPARATOR
.
5 answers
Чтобы исправить регулярное выражение:
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 не является одним символом.
Также можно использовать нотацию доступа к массиву
$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;