Menu

PHP str_contains(): verificare se una stringa contiene testo

str_contains($haystack, $needle) restituisce true se $needle compare in un punto qualsiasi di $haystack. Impara la versione senza distinzione tra maiuscole e minuscole, str_starts_with e str_ends_with, il controllo di più parole e la versione con strpos per PHP 7.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

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.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA