Str starts with: примеры (PHP)

Проверка начала строки: 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)
Пустая подстрока needle
<?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
<?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
<?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
<?php
$path = '/home/user/file.txt';
if (str_starts_with($path, '/')) {
    echo 'Абсолютный путь';
} else {
    echo 'Относительный путь';
}
?>
Абсолютный путь
Использование с mbstring

Для многобайтовых кодировок функция работает корректно, так как бинарно-безопасна. Однако для сложных случаев сравнения с учетом локали стоит использовать mb_check_encoding предварительно.

Пример php
<?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 и выше.

PHP str_starts_with function comments

En
Str starts with Checks if a string starts with a given substring