stristr()
La funzione stristr() in PHP trova la prima occorrenza di una sottostringa in una stringa senza distinzione tra maiuscole e minuscole.
Introduzione
stristr() è una funzione PHP per le stringhe che trova la prima occorrenza di una sottostringa all'interno di una stringa, ignorando le maiuscole e le minuscole, e restituisce tutto da quel punto fino alla fine della stringa. Se la sottostringa non viene trovata, restituisce false.
È la controparte senza distinzione tra maiuscole e minuscole di strstr(). Usa stristr() quando la corrispondenza deve trattare Hello, HELLO e hello come uguali — ad esempio nella ricerca di parole chiave inserite dall'utente, nel parsing di un indirizzo email o nella suddivisione di una stringa su un separatore indipendentemente dal caso.
Questa pagina tratta la sintassi, il valore restituito, lo switch opzionale $before_needle, le insidie comuni e come stristr() differisce dalle funzioni correlate.
Sintassi
stristr(string $haystack, string $needle, bool $before_needle = false): string|false| Parametro | Descrizione |
|---|---|
$haystack | La stringa in cui cercare. |
$needle | La sottostringa da cercare. La corrispondenza non distingue maiuscole e minuscole. |
$before_needle | Opzionale. Se true, restituisce la parte di $haystack prima della prima corrispondenza invece che dopo. |
Valore restituito: la porzione corrispondente di $haystack (le maiuscole e minuscole originali vengono preservate, non convertite in minuscolo), oppure false se $needle non compare.
Esempio di base
Anche se abbiamo cercato "BROWN" in maiuscolo, stristr() ha trovato la corrispondenza con brown minuscolo nella stringa e ha restituito il resto della frase a partire da quella parola — con le maiuscole e minuscole originali intatte.
Ottenere la parte prima della corrispondenza
Passa true come terzo argomento per restituire tutto prima della prima corrispondenza. Questo è utile per suddividere una stringa su un delimitatore, ad esempio per estrarre la parte utente di un indirizzo email:
<?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"; // UserVerificare se una sottostringa esiste
Un errore comune è usare stristr() come test booleano. Funziona, ma devi confrontare con false usando l'operatore rigoroso !==, perché la stringa restituita può essere falsy (ad esempio "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)Se hai solo bisogno di sapere se una sottostringa esiste — e non hai bisogno della porzione corrispondente — preferisci stripos() (posizione senza distinzione di maiuscole) o strpos() (posizione con distinzione di maiuscole). Restituiscono l'indice della corrispondenza e sono leggermente più veloci perché non copiano il resto della stringa.
stristr() rispetto alle funzioni correlate
| Funzione | Distingue maiuscole? | Restituisce |
|---|---|---|
stristr() | No | Sottostringa corrispondente (o false) |
strstr() | Sì | Sottostringa corrispondente (o false) |
stripos() | No | Indice di posizione (o false) |
strpos() | Sì | Indice di posizione (o false) |
Usa stristr() quando vuoi il testo dalla corrispondenza in poi e il caso deve essere ignorato. Usa stripos()/strpos() quando vuoi solo la posizione o una risposta sì/no.
Note e insidie
falsevs. stringa vuota. Una corrispondenza riuscita non restituisce mai una stringa vuota all'inizio, ma una corrispondenza alla fine di$haystackrestituisce solo il needle. Testa sempre con!== false.- Il caso viene ignorato solo per la corrispondenza. La sottostringa restituita mantiene le maiuscole e minuscole del
$haystackoriginale. - Testo multibyte/UTF-8.
stristr()opera sui byte. Per una corrispondenza affidabile senza distinzione di maiuscole di caratteri accentati o non latini, usamb_stristr()dall'estensionembstring. $needlenon stringa. A partire da PHP 8.0,$needleviene sempre trattato come stringa. Nelle versioni precedenti un needle non stringa veniva interpretato come il suo codice carattere ASCII.
Conclusione
stristr() restituisce la porzione di una stringa dalla prima corrispondenza senza distinzione di maiuscole di una sottostringa in poi, oppure false quando non c'è corrispondenza — e con $before_needle impostato su true, la porzione prima della corrispondenza. Sceglila quando hai bisogno del testo corrispondente indipendentemente dal caso; scegli stripos() o strpos() quando hai solo bisogno di una posizione o di una verifica di presenza.