Vérifier si une chaîne est présente dans une autre chaîne

Pour vérifier la présence d'une chaîne dans une autre, habituellement nous utilisons la méthode strpos (ou stripos insensible à la casse).

$var = 'joyeux noël les amis';

if (strpos($var, 'ami') !== false) {
     echo 'Chaîne "ami" trouvé';
}

Attention à bien utiliser la comparaison stricte avec !== car strpos peut retourner 0 si la chaîne recherchée est en tout début de la phrase (et on sait bien que 0 est considéré comme false en PHP).

Une autre manière est d'utiliser la méthode strstr (ou stristr).

C'est juste pour information, il est recommandé dans notre cas de plutôt utiliser strpos pour des raisons de performances.

$var = 'joyeux noël les amis';

if (strstr($var, 'ami') !== false) {
     echo 'Chaîne "ami" trouvé';
}

Mais ces différentes méthodes ne sont pas très parlantes ! N'existerait-il pas une méthode qui nous retournerait simplement true or false ?

PHP 8.0 à la rescousse

À partir de PHP 8.0, 3 nouvelles méthodes font leur apparition pour nous faciliter la vie :

  • str_contains qui va simplement retourner true or false si la chaîne recherchée est présente dans une autre chaîne :
$var = 'joyeux noël les amis';

if (str_contains($var, 'ami')) {
     echo 'Chaîne "ami" trouvé';
}
  • str_starts_with qui va retourner true si une chaîne commence par une autre chaîne, false sinon :
$var = 'joyeux noël les amis';

if (str_starts_with($var, 'joye')) {
     echo 'La chaîne commence bien par "joye"';
}
  • str_ends_with qui va retourner true si une chaîne termine par une autre chaîne, false sinon :
$var = 'joyeux noël les amis';

if (str_ends_with($var, 'mis')) {
     echo 'La chaîne termine bien par "mis"';
}

Tout devient plus simple non ?

Cet article t'a plu ? Si oui, je te propose de t'inscrire à ma dev letter pour recevoir régulièrement dans ta boîte mail mes conseils, mes nouveaux articles, des vidéos à voir, des outils à découvrir et encore bien d’autres choses.

Je m'inscris