PHP string contains : tester une sous-chaîne
Pour un contrôle PHP string contains, utilisez str_contains() pour tester si une chaîne en contient une autre et obtenir un résultat booléen. Cette approche convient aux clauses de garde, aux vérifications de routage et à la validation d’entrée quand seule une réponse oui/non est utile. Par rapport à strpos(), elle évite le piège du 0 évalué comme faux et reste lisible sans !== false. str_contains() est disponible à partir de PHP 8.0.
Exemple PHP string contains pour vérifier une sous-chaîne
Sortie :
La sortie apparaîtra ici...
Sortie :
Statut : expédiée
Comment cet exemple fonctionne
$messagecontient une chaîne simple avec un statut d’expédition.str_contains($message, "expédiée")parcourt la chaîne source pour trouver exactement la sous-chaîne"expédiée"et renvoietrue, car elle est présente.- Le bloc
ifs’exécute parce que la valeur de retour est déjà booléenne, sans comparaison supplémentaire sujette au transtypage.
Qu’est-ce que str_contains en PHP ?
str_contains(string $haystack, string $needle): bool est une fonction PHP 8.0 qui effectue une recherche de sous-chaîne sensible à la casse et sûre au niveau binaire. Elle renvoie true quand $needle est trouvé n’importe où dans $haystack, sinon false. Un $needle vide renvoie toujours true : c’est un comportement défini dans la spécification PHP, pas un bug.
Erreurs courantes avec str_contains()
Attendre une recherche insensible à la casse
Incorrect :
str_contains("Hello World", "hello"); // false
Correct :
stripos("Hello World", "hello") !== false; // true
str_contains() est sensible à la casse. Pour une recherche insensible à la casse, utilisez stripos() !== false (ou normalisez les deux chaînes avant d’appeler str_contains()).
Traiter strpos() comme un booléen (piège de migration)
Incorrect :
if (strpos("shipped", "ship")) echo "match"; // aucune sortie (0 est falsy)
Correct :
if (strpos("shipped", "ship") !== false) echo "match";
En PHP 8+, préférez str_contains() quand vous avez seulement besoin d’un booléen.
str_contains vs strpos vs stripos
| Fonction | Retour | Casse | Version PHP |
|---|---|---|---|
str_contains() | bool | Sensible | 8.0+ |
strpos() | int|false | Sensible | 4+ |
stripos() | int|false | Insensible | 5+ |
Utilisez str_contains() quand vous avez seulement besoin d’une vérification booléenne sur PHP 8+. Utilisez strpos() quand vous avez besoin de la position de correspondance ou devez prendre en charge PHP 7.x. Utilisez stripos() pour une recherche insensible à la casse quand vous avez aussi besoin de la position (elle renvoie l’index comme strpos()).
FAQ
str_contains est-elle sensible à la casse ?
Oui. str_contains("PHP", "php") renvoie false. Pour des vérifications insensibles à la casse, mettez les deux arguments en minuscules avec strtolower() avant d’appeler str_contains(), ou utilisez stripos($haystack, $needle) !== false.
Pourquoi str_contains renvoie-t-elle true pour une chaîne vide ?
Par définition, la chaîne vide est une sous-chaîne de toute chaîne. Cela correspond au comportement de strpos("anything", "") qui renvoie 0 en PHP 8. Si cette règle peut fausser votre logique, filtrez les entrées utilisateur vides avant d’appeler str_contains().
Comment vérifier qu’une chaîne contient une sous-chaîne en PHP 7 ?
Utilisez strpos($haystack, $needle) !== false. La comparaison stricte !== false est indispensable, car strpos() renvoie 0 quand l’aiguille est au début, et 0 est évalué comme faux en PHP. Ce piège est la raison principale de l’introduction de str_contains().