PHP: Kontrola, zda řetězec obsahuje podřetězec

Jak zkontrolovat, zda řetězec obsahuje jiný řetězec nebo podřetězec v PHP Určení, zda řetězec obsahuje jiný řetězec, podřetězec, slovo nebo znak, je v PHP častým požadavkem. V tom...

Poptat web

14. 11. 2025

PHP: Kontrola, zda řetězec obsahuje podřetězec

Jak zkontrolovat, zda řetězec obsahuje jiný řetězec nebo podřetězec v PHP

Určení, zda řetězec obsahuje jiný řetězec, podřetězec, slovo nebo znak, je v PHP častým požadavkem. V tomto příspěvku představím nejspolehlivější a nejmodernější způsoby, jak tuto úlohu provést. Každá metoda je stručná, přesná a vychází z aktuálních osvědčených postupů jazyka PHP.

Používání stránek str_contains() v PHP 8 a novějším

str_contains() je nejjednodušší a nejčitelnější způsob, jak zkontrolovat, zda řetězec obsahuje podřetězec nebo zda řetězec obsahuje slovo.

if (str_contains($haystack, $needle)) {
echo "Found";
} else {
echo "Not found";
}

Klíčové body:

  • Vrací true, pokud podřetězec existuje, jinak false.
  • Ideální pro většinu situací, kdy potřebujete rychle ověřit, zda řetězec obsahuje řetězec.
  • If $needle je prázdný řetězec, funkce vždy vrátí true. Ověřit $needle pokud to není žádoucí.

str_contains() je doporučenou moderní funkcí a nejpřehlednějším způsobem vyhledávání v řetězcových operacích.

Používání stránek strpos() a stripos() pro kontroly podle polohy

Pro verze PHP před 8 nebo v případě, že potřebujete přesnou pozici shody, použijte následující příkaz strpos().

if (strpos($haystack, $needle) !== false) {
echo "Found";
}

Důležité informace:

  • Vrací index shody založený na nule nebo false, pokud nebyla nalezena.
  • Vždy používejte !== false protože pozice 0 je platná a jinak by byla chybně interpretována.
  • stripos() provede vyhledávání bez rozlišení velkých a malých písmen.

Tyto funkce použijte, pokud potřebujete vědět, kde se podřetězec vyskytuje, nebo pokud pracujete na serverech, které stále používají starší verze PHP.

Používání stránek preg_match() pro hranice slov a pravidla vzorů

preg_match() je vhodným nástrojem, pokud potřebujete zkontrolovat, zda řetězec obsahuje slovo s přesnými požadavky na shodu, jako jsou celá slova, pravidla nerozlišující velká a malá písmena, nepovinné znaky nebo pokročilé vzory.

if (preg_match('/example/', $string)) {
echo "Found";
}

Schopnosti:

  • Podporuje úplné regulární výrazy pro složité vyhledávání.
  • Přidejte i modifikátor pro porovnávání bez rozlišení velkých a malých písmen.
  • K zajištění přesné detekce celých slov použijte hranice.

Například, aby odpovídalo celému slovu joe, ale ne joey:

if (preg_match('/\bjoe\b/i', $string)) {
echo "Found whole word";
}

Používání stránek strstr() vrátit odpovídající podřetězec a dále

Pokud potřebujete načíst část řetězce začínající shodou, použijte příkaz strstr().

$result = strstr($string, $needle);
 
if ($result !== false) {
echo "Substring: " . $result;
}

Charakteristika:

  • Vrací podřetězec začínající prvním výskytem slova $needle.
  • Vrací false, pokud nebyl nalezen.
  • To je užitečné, pokud chcete zachytit veškerý text, který následuje za odpovídajícím segmentem.

Stručný návod pro výběr správné metody

Požadavek Nejlepší metoda
Jednoduchá kontrola v PHP 8 a novějším str_contains()
Potřeba pozice nebo dřívější podpora PHP strpos() or stripos()
Potřeba zkontrolovat, zda řetězec obsahuje slovo s hranicemi nebo regex pravidla preg_match()
Potřebujete podřetězec začínající od místa shody strstr()

Komplexní příklad s použitím všech hlavních metod

$haystack = "The quick brown fox jumps over the lazy dog";
$needle = "fox";
 
// 1. str_contains (PHP 8+)
echo str_contains($haystack, $needle)
? "Found via str_contains\n"
: "Not found\n";
 
// 2. strpos (case sensitive)
if (strpos($haystack, $needle) !== false) {
echo "Found via strpos\n";
}
 
// 3. stripos (case insensitive)
if (stripos($haystack, $needle) !== false) {
echo "Found via stripos\n";
}
 
// 4. preg_match (whole word match)
if (preg_match('/\bfox\b/i', $haystack)) {
echo "Found via preg_match (whole word)\n";
}
 
// 5. strstr to return substring from match
$substring = strstr($haystack, $needle);
if ($substring !== false) {
echo "Found via strstr. Substring is: $substring\n";
}

Závěr

  • str_contains() je nejpřehlednější a nejmodernější řešení pro kontrolu, zda řetězec obsahuje podřetězec v PHP 8 a novějším.
  • Použijte strpos() or stripos() pokud potřebujete index shody nebo kompatibilitu se staršími verzemi PHP.
  • Použijte preg_match() pro porovnávání celých slov, složitých vzorů nebo pokročilých pravidel.
  • S prázdnými jehlami a rozdíly v pouzdrech zacházejte záměrně, abyste se vyhnuli neočekávanému chování.

Původní článek publikoval Nabil Hassen.