Str starts with: примеры (PHP)
str_starts_with(string haystack, string needle): boolФункция str_starts_with проверяет, начинается ли строка с заданной подстроки. Эта функция появилась в PHP 8. Она возвращает true, если строка начинается с указанной подстроки, и false в противном случае.
Функция используется для простых проверок префикса строки, что часто требуется при обработке путей, URL, идентификаторов или классификации данных. Она является бинарно-безопасной и чувствительной к регистру.
Аргументы функции:
- haystack (тип string) - строка, в которой производится поиск.
- needle (тип string) - подстрока, которую ищут в начале строки
haystack.
Если needle является пустой строкой (''), функция возвращает true.
Примеры использования
Проверка наличия префикса:
<?php
$str = 'Привет, мир!';
$result = str_starts_with($str, 'Привет');
var_dump($result);
?>
bool(true)
<?php
$str = 'PHP 8';
$result = str_starts_with($str, 'php');
var_dump($result);
?>
bool(false)
<?php
$str = 'Любая строка';
$result = str_starts_with($str, '');
var_dump($result);
?>
bool(true)
<?php
$url = 'https://example.com/page';
$protocol = 'https:';
if (str_starts_with($url, $protocol)) {
echo 'Защищенный протокол';
}
?>
Защищенный протокол
Похожие функции в PHP
В PHP существуют другие функции для работы со строками, которые могут частично заменять str_starts_with.
Функция strpos возвращает позицию первого вхождения подстроки. Для проверки начала строки можно сравнить результат с 0. Недостаток — менее читаемый код и осторожность с типами (строгое сравнение).
<?php
$str = 'Начало строки';
if (strpos($str, 'Начало') === 0) {
echo 'Найдено';
}
?>
Сравнение начала строки через substr менее эффективно, так как создает новую строку.
<?php
$str = 'Пример';
if (substr($str, 0, 3) === 'При') {
echo 'Совпадает';
}
?>
Функция str_starts_with предпочтительнее для проверки префикса из-за простоты, читаемости и производительности.
Типичные ошибки
Путаница между haystack и needle приводит к неожиданным результатам.
<?php
$result = str_starts_with('префикс', 'строка с префиксом');
var_dump($result);
?>
bool(false)
Функция возвращает логическое значение, а не позицию.
<?php
$position = str_starts_with('abc', 'a');
// $position содержит true, а не 0
?>
Функция чувствительна к регистру, что иногда упускают.
<?php
$result = str_starts_with('PHP', 'php');
var_dump($result); // false
?>
bool(false)
История изменений
Функция str_starts_with была добавлена в PHP 8.0.0. В более ранних версиях она отсутствовала, и приходилось использовать альтернативные методы.
Начиная с PHP 8.0, функция является встроенной и оптимизированной. Изменений в поведении функции в последующих минорных версиях PHP 8 не было.
Расширенные примеры
Фильтрация строк по префиксу.
<?php
$items = ['test_file.txt', 'image.jpg', 'test_document.pdf'];
$filtered = array_filter($items, fn($item) => str_starts_with($item, 'test'));
print_r($filtered);
?>
Array
(
[0] => test_file.txt
[2] => test_document.pdf
)
Проверка, что пользовательский ввод начинается с допустимого протокола.
<?php
$input = 'https://site.com';
$allowedProtocols = ['https://', 'http://'];
$isValid = false;
foreach ($allowedProtocols as $protocol) {
if (str_starts_with($input, $protocol)) {
$isValid = true;
break;
}
}
echo $isValid ? 'Valid' : 'Invalid';
?>
Valid
Определение типа пути (абсолютный или относительный) в Unix-подобных системах.
<?php
$path = '/home/user/file.txt';
if (str_starts_with($path, '/')) {
echo 'Абсолютный путь';
} else {
echo 'Относительный путь';
}
?>
Абсолютный путь
Для многобайтовых кодировок функция работает корректно, так как бинарно-безопасна. Однако для сложных случаев сравнения с учетом локали стоит использовать mb_check_encoding предварительно.
<?php
$string = 'Привет';
$result = str_starts_with($string, 'Пр');
var_dump($result);
?>
bool(true)
Аналоги в других языках
Str starts with в Python
Используют метод строк startswith(). Он может проверять несколько префиксов и имеет параметры для указания диапазона.
text = 'Hello world'
result = text.startswith('Hello')
print(result) # True
Str starts with в Javascript
Применяют метод startsWith(), который похож на PHP-функцию. Чувствителен к регистру.
let str = 'JavaScript';
let result = str.startsWith('Java');
console.log(result); // true
Str starts with в MySQL
Для проверки начала строки используют функцию LOCATE или оператор LIKE с шаблоном.
SELECT 'MySQL' LIKE 'My%'; -- 1 (true)
Основное отличие PHP-функции — простота и наличие только в версиях PHP 8 и выше.