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
$needleje prázdný řetězec, funkce vždy vrátí true. Ověřit$needlepokud 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
!== falseprotož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
imodifiká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()orstripos()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í.