str_contains($haystack, $needle) restituisce true se $needle compare in un punto qualsiasi di $haystack, e false altrimenti. È stata aggiunta in PHP 8.0 e distingue maiuscole e minuscole.
A differenza di strpos(), restituisce un vero booleano, quindi non c'è la trappola di "trovato alla posizione 0 sembra false".
Sintassi
str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool
Tutte e tre sono state aggiunte in PHP 8.0 e lavorano byte per byte, quindi gestiscono correttamente il giapponese e altro testo UTF-8 senza una versione mb_.
Verificare l'inizio o la fine con str_starts_with e str_ends_with
Contiene, senza distinzione tra maiuscole e minuscole
Non esiste str_icontains(). Converti prima entrambe le stringhe in minuscolo. mb_strtolower() converte in minuscolo anche le lettere non ASCII, come É o il cirillico, che strtolower() lascia invariate.
L'ago vuoto restituisce true
Un ago vuoto viene trovato in ogni stringa, anche in una vuota. Conta quando l'ago arriva da una casella di ricerca che l'utente ha lasciato vuota.
Verificare se una stringa contiene una o tutte tra più parole
str_contains() accetta un solo ago. Scorri un array di aghi: restituisci appena uno corrisponde per "almeno una", oppure appena uno fallisce per "tutte".
Per verificare se un valore è uno degli elementi di un array, invece che una sottostringa di una stringa, usa in_array().
Prima di PHP 8: strpos !== false
Il codice che deve girare su PHP 7 usa strpos() con un confronto stretto. Dà la stessa risposta di str_contains(), tranne che per un ago vuoto: lo strpos() di PHP 7 stampava Warning: strpos(): Empty needle e restituiva false.
L'ultima riga stampa bool(false) anche se il testo c'è, perché php si trova alla posizione 0. Sostituire questi controlli con str_contains() è uno degli aggiornamenti a PHP 8 più facili.
Domande frequenti
Come verifico se una stringa contiene una parola in PHP?
Su PHP 8 usa str_contains($haystack, $needle), che restituisce true o false: str_contains('Hello world', 'world') è true. Su PHP 7 usa strpos($haystack, $needle) !== false.
str_contains distingue maiuscole e minuscole?
Sì. Per un controllo che le ignori, converti entrambi i lati in minuscolo: str_contains(mb_strtolower($haystack), mb_strtolower($needle)), oppure usa stripos($haystack, $needle) !== false.
Perché str_contains restituisce true per una stringa vuota?
Ogni stringa contiene la stringa vuota, quindi str_contains('abc', '') restituisce true. Se l'ago arriva dall'input dell'utente, verifica prima che non sia vuoto.
Come verifico se una stringa inizia o finisce con qualcosa in PHP?
Usa str_starts_with($s, 'http') e str_ends_with($s, '.pdf'), entrambe aggiunte in PHP 8.0. Come str_contains(), distinguono maiuscole e minuscole e restituiscono un bool.