W3docs

stristr()

La fonction stristr() en PHP trouve la première occurrence d'une sous-chaîne dans une chaîne sans tenir compte de la casse et retourne la portion correspondante.

Introduction

stristr() est une fonction PHP de manipulation de chaînes qui trouve la première occurrence d'une sous-chaîne dans une chaîne, sans tenir compte de la casse, et retourne tout ce qui suit ce point jusqu'à la fin de la chaîne. Si la sous-chaîne n'est pas trouvée, elle retourne false.

C'est la version insensible à la casse de strstr(). Utilisez stristr() lorsque la correspondance doit traiter Hello, HELLO et hello de la même manière — par exemple pour rechercher des mots-clés saisis par l'utilisateur, analyser une adresse e-mail ou diviser une chaîne sur un marqueur quelle que soit la casse.

Cette page couvre la syntaxe, la valeur de retour, le commutateur optionnel $before_needle, les pièges courants et les différences entre stristr() et les fonctions associées.

Syntaxe

stristr(string $haystack, string $needle, bool $before_needle = false): string|false
ParamètreDescription
$haystackLa chaîne dans laquelle effectuer la recherche.
$needleLa sous-chaîne à rechercher. La correspondance est insensible à la casse.
$before_needleOptionnel. Si true, retourne la partie de $haystack avant la première correspondance au lieu d'après.

Valeur de retour : la portion correspondante de $haystack (la casse d'origine est préservée, pas mise en minuscules), ou false si $needle n'apparaît pas.

Exemple de base

php— editable, runs on the server

Même si nous avons recherché "BROWN" en majuscules, stristr() a trouvé brown en minuscules dans la chaîne et a retourné le reste de la phrase à partir de ce mot — en préservant la casse d'origine.

Obtenir la partie avant la correspondance

Passez true comme troisième argument pour retourner tout ce qui se trouve avant la première correspondance. C'est pratique pour diviser une chaîne sur un délimiteur, comme extraire la partie utilisateur d'une adresse e-mail :

<?php

$email = "[email protected]";

$after  = stristr($email, "@");        // from "@" onward
$before = stristr($email, "@", true);  // up to (not including) "@"

echo $after . "\n";   // @Example.com
echo $before . "\n";  // User

Vérifier l'existence d'une sous-chaîne

Une erreur courante consiste à utiliser stristr() comme test booléen. Cela fonctionne, mais vous devez comparer avec false à l'aide de l'opérateur strict !==, car la chaîne retournée peut elle-même être fausse (par exemple "0") :

<?php

$text = "Contact us at [email protected]";

if (stristr($text, "support") !== false) {
  echo "Contains 'support' (any case)";
} else {
  echo "Not found";
}
// Output: Contains 'support' (any case)

Si vous avez seulement besoin de savoir si une sous-chaîne existe — et n'avez pas besoin de la portion correspondante — préférez stripos() (position insensible à la casse) ou strpos() (position sensible à la casse). Elles retournent l'index de la correspondance et sont légèrement plus rapides car elles ne copient pas le reste de la chaîne.

stristr() vs. fonctions associées

FonctionSensible à la casse ?Retourne
stristr()NonSous-chaîne correspondante (ou false)
strstr()OuiSous-chaîne correspondante (ou false)
stripos()NonIndex de position (ou false)
strpos()OuiIndex de position (ou false)

Choisissez stristr() lorsque vous voulez le texte à partir de la correspondance et que la casse doit être ignorée. Choisissez stripos()/strpos() lorsque vous voulez uniquement la position ou une réponse oui/non.

Notes et pièges

  • false vs. chaîne vide. Une correspondance réussie ne retourne jamais une chaîne vide au début, mais une correspondance tout à la fin de $haystack retourne uniquement le needle. Testez toujours avec !== false.
  • La casse n'est ignorée que pour la correspondance. La sous-chaîne retournée conserve la casse de $haystack d'origine.
  • Texte multioctet/UTF-8. stristr() opère sur des octets. Pour une correspondance insensible à la casse fiable avec des caractères accentués ou non latins, utilisez mb_stristr() de l'extension mbstring à la place.
  • $needle non-string. À partir de PHP 8.0, $needle est toujours traité comme une chaîne. Dans les versions antérieures, un needle non-string était interprété comme son code de caractère ASCII.

Conclusion

stristr() retourne la portion d'une chaîne à partir de la première correspondance insensible à la casse d'une sous-chaîne, ou false s'il n'y a pas de correspondance — et avec $before_needle défini à true, la portion avant la correspondance. Choisissez-la lorsque vous avez besoin du texte correspondant quelle que soit la casse ; choisissez stripos() ou strpos() lorsque vous avez seulement besoin d'une position ou d'une vérification de présence.

Pratique

Pratique
Que fait la fonction 'stristr' en PHP ?
Que fait la fonction 'stristr' en PHP ?
Was this page helpful?