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ètre | Description |
|---|---|
$haystack | La chaîne dans laquelle effectuer la recherche. |
$needle | La sous-chaîne à rechercher. La correspondance est insensible à la casse. |
$before_needle | Optionnel. 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
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"; // UserVé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
| Fonction | Sensible à la casse ? | Retourne |
|---|---|---|
stristr() | Non | Sous-chaîne correspondante (ou false) |
strstr() | Oui | Sous-chaîne correspondante (ou false) |
stripos() | Non | Index de position (ou false) |
strpos() | Oui | Index 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
falsevs. chaîne vide. Une correspondance réussie ne retourne jamais une chaîne vide au début, mais une correspondance tout à la fin de$haystackretourne 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
$haystackd'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, utilisezmb_stristr()de l'extensionmbstringà la place. $needlenon-string. À partir de PHP 8.0,$needleest 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.