Menu

PHP str_contains() : savoir si une chaîne contient un texte

str_contains($haystack, $needle) renvoie true si $needle apparaît quelque part dans $haystack. La version insensible à la casse, str_starts_with et str_ends_with, vérifier plusieurs mots, et la version avec strpos pour PHP 7.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

str_contains($haystack, $needle) renvoie true si $needle apparaît quelque part dans $haystack, et false sinon. Elle a été ajoutée en PHP 8.0 et est sensible à la casse.

Contrairement à strpos(), elle renvoie un vrai booléen, donc pas de piège du type « trouvé à la position 0 ressemble à false ».

Syntaxe

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

Les trois ont été ajoutées en PHP 8.0 et travaillent octet par octet, elles gèrent donc correctement le japonais et les autres textes UTF-8 sans version mb_.

Vérifier le début ou la fin avec str_starts_with et str_ends_with

Contient, sans tenir compte de la casse

Il n'existe pas de str_icontains(). Mettez d'abord les deux chaînes en minuscules. mb_strtolower() met aussi en minuscules les lettres hors ASCII, comme É ou le cyrillique, que strtolower() laisse telles quelles.

L'aiguille vide renvoie true

Une aiguille vide est trouvée dans toute chaîne, y compris une chaîne vide. Cela compte quand l'aiguille vient d'un champ de recherche que l'utilisateur a laissé vide.

Vérifier si une chaîne contient l'un ou tous de plusieurs mots

str_contains() prend une seule aiguille. Bouclez sur un tableau d'aiguilles : renvoyez dès qu'une correspond pour « l'un », ou dès qu'une échoue pour « tous ».

Pour vérifier si une valeur est l'un des éléments d'un tableau, et non une sous-chaîne d'une chaîne, utilisez in_array().

Avant PHP 8 : strpos !== false

Le code qui doit tourner en PHP 7 utilise strpos() avec une comparaison stricte. Il donne la même réponse que str_contains(), sauf pour une aiguille vide : strpos() en PHP 7 affichait Warning: strpos(): Empty needle et renvoyait false.

La dernière ligne affiche bool(false) alors que le texte est présent, car php se trouve à la position 0. Remplacer ces tests par str_contains() est l'une des mises à niveau PHP 8 les plus faciles.

Questions fréquentes

Comment vérifier si une chaîne contient un mot en PHP ?

En PHP 8, utilisez str_contains($haystack, $needle), qui renvoie true ou false : str_contains('Hello world', 'world') vaut true. En PHP 7, utilisez strpos($haystack, $needle) !== false.

str_contains est-elle sensible à la casse ?

Oui. Pour une vérification insensible à la casse, mettez les deux côtés en minuscules : str_contains(mb_strtolower($haystack), mb_strtolower($needle)), ou utilisez stripos($haystack, $needle) !== false.

Pourquoi str_contains renvoie-t-elle true pour une chaîne vide ?

Toute chaîne contient la chaîne vide, donc str_contains('abc', '') renvoie true. Si l'aiguille vient d'une saisie utilisateur, vérifiez d'abord qu'elle n'est pas vide.

Comment vérifier si une chaîne commence ou se termine par quelque chose en PHP ?

Utilisez str_starts_with($s, 'http') et str_ends_with($s, '.pdf'), ajoutées toutes deux en PHP 8.0. Comme str_contains(), elles sont sensibles à la casse et renvoient un booléen.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER