Menu

str_contains() w PHP: czy string zawiera tekst

str_contains($haystack, $needle) zwraca true, jeśli $needle występuje gdziekolwiek w $haystack. Poznaj wersję bez rozróżniania wielkości liter, str_starts_with i str_ends_with, sprawdzanie kilku słów i wersję ze strpos dla PHP 7.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

str_contains($haystack, $needle) zwraca true, jeśli $needle występuje gdziekolwiek w $haystack, a w przeciwnym razie false. Dodano ją w PHP 8.0 i rozróżnia wielkość liter.

W przeciwieństwie do strpos() zwraca prawdziwą wartość logiczną, więc nie ma pułapki „znalezione na pozycji 0 wygląda jak false”.

Składnia

str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool

Wszystkie trzy dodano w PHP 8.0 i działają bajt po bajcie, więc poprawnie obsługują polski, japoński i inny tekst UTF-8 bez wersji mb_.

Sprawdzanie początku lub końca przez str_starts_with i str_ends_with

Zawieranie bez rozróżniania wielkości liter

Nie ma funkcji str_icontains(). Najpierw zamień oba stringi na małe litery. mb_strtolower() zmienia też litery spoza ASCII, takie jak É, polskie znaki czy cyrylica, których strtolower() nie rusza.

Pusta igła zwraca true

Pusta igła znajduje się w każdym stringu, także w pustym. Ma to znaczenie, gdy igła pochodzi z pola wyszukiwania, które użytkownik zostawił puste.

Czy string zawiera którekolwiek lub wszystkie z kilku słów

str_contains() przyjmuje jedną igłę. Przejdź pętlą po tablicy igieł: dla „którekolwiek” zwróć wynik, gdy tylko jedna pasuje, a dla „wszystkie”, gdy tylko jedna nie pasuje.

Aby sprawdzić, czy wartość jest jednym z elementów tablicy, a nie podciągiem stringa, użyj in_array().

Przed PHP 8: strpos !== false

Kod, który musi działać w PHP 7, używa strpos() ze ścisłym porównaniem. Daje tę samą odpowiedź co str_contains(), z wyjątkiem pustej igły: strpos() w PHP 7 wypisywało Warning: strpos(): Empty needle i zwracało false.

Ostatnia linia wypisuje bool(false), choć tekst tam jest, bo php leży na pozycji 0. Zastąpienie takich sprawdzeń przez str_contains() to jedna z najłatwiejszych zmian przy przejściu na PHP 8.

Najczęściej zadawane pytania

Jak sprawdzić, czy string zawiera słowo w PHP?

W PHP 8 użyj str_contains($haystack, $needle), które zwraca true albo false: str_contains('Hello world', 'world') daje true. W PHP 7 użyj strpos($haystack, $needle) !== false.

Czy str_contains rozróżnia wielkość liter?

Tak. Aby sprawdzić bez rozróżniania wielkości liter, zamień obie strony na małe litery: str_contains(mb_strtolower($haystack), mb_strtolower($needle)) albo użyj stripos($haystack, $needle) !== false.

Dlaczego str_contains zwraca true dla pustego stringa?

Każdy string zawiera pusty string, więc str_contains('abc', '') zwraca true. Jeśli igła pochodzi od użytkownika, najpierw sprawdź, czy nie jest pusta.

Jak sprawdzić, czy string zaczyna się lub kończy czymś w PHP?

Użyj str_starts_with($s, 'http') i str_ends_with($s, '.pdf'), obu dodanych w PHP 8.0. Podobnie jak str_contains() rozróżniają wielkość liter i zwracają wartość logiczną.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ