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

  1. $message contient une chaîne simple avec un statut d’expédition.
  2. str_contains($message, "expédiée") parcourt la chaîne source pour trouver exactement la sous-chaîne "expédiée" et renvoie true, car elle est présente.
  3. Le bloc if s’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

FonctionRetourCasseVersion PHP
str_contains()boolSensible8.0+
strpos()int|falseSensible4+
stripos()int|falseInsensible5+

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().