W3docs

stripos()

La funzione stripos() in PHP trova la posizione della prima occorrenza di una sottostringa in una stringa senza distinzione tra maiuscole e minuscole.

Introduzione

stripos() trova la posizione della prima occorrenza di una sottostringa all'interno di una stringa, ignorando le maiuscole e minuscole. Restituisce l'indice a base zero in cui inizia la corrispondenza, oppure false se la sottostringa non è presente.

La i nel nome sta per case-insensitive: "PHP", "php" e "Php" corrispondono tutti allo stesso modo. Se hai bisogno di una ricerca con distinzione tra maiuscole e minuscole, usa strpos(). Questa pagina tratta la sintassi, il trabocchetto critico !== false, il parametro opzionale $offset e come stripos() si relaziona alle altre funzioni di posizione.

Sintassi

stripos(string $haystack, string $needle, int $offset = 0): int|false
ParametroDescrizione
$haystackLa stringa in cui cercare.
$needleLa sottostringa da cercare.
$offsetOpzionale. L'indice in $haystack da cui inizia la ricerca. Il valore predefinito è 0 (l'inizio). Un offset negativo conta dalla fine della stringa.

Valore restituito: la posizione a base zero della prima corrispondenza (un int), oppure false se $needle non viene trovato.

Un esempio base

php— editable, runs on the server

Il needle "fox" è in minuscolo ma l'haystack contiene "FOX". Poiché stripos() ignora le maiuscole, corrisponde comunque e stampa:

Found 'fox' at position 16

Sostituendo con strpos() il risultato sarebbe false, poiché le maiuscole differiscono.

Il trabocchetto !== false

Questo è il bug più comune con stripos() (e con ogni funzione *pos()). Quando una corrispondenza viene trovata all'inizio della stringa, il valore restituito è 0 — e 0 è falsy in PHP. Un controllo lasco come if (stripos(...)) tratterebbe una vera corrispondenza come "non trovata":

<?php

$pos = stripos("Hello world", "hello");

// Wrong: 0 is falsy, so this branch runs even though there IS a match
if ($pos) {
  echo "loose check: found\n";
} else {
  echo "loose check: NOT found (wrong!)\n";
}

// Correct: compare against false with the strict !== operator
if ($pos !== false) {
  echo "strict check: found at position $pos\n";
} else {
  echo "strict check: not found\n";
}

Output:

loose check: NOT found (wrong!)
strict check: found at position 0

Confronta sempre il risultato con !== false quando vuoi solo sapere se la sottostringa esiste.

Uso del parametro $offset

Il terzo argomento ti permette di iniziare la ricerca a metà della stringa — utile per trovare la seconda (o successiva) occorrenza:

<?php

$text = "PHP is great. PHP is everywhere.";

$first  = stripos($text, "php");        // start at 0
$second = stripos($text, "php", $first + 1); // skip past the first match

echo "First occurrence:  $first\n";
echo "Second occurrence: $second\n";

Output:

First occurrence:  0
Second occurrence: 14

Un uso pratico: filtro di parole chiave senza distinzione di maiuscole

Poiché ignora le maiuscole, stripos() è particolarmente adatto per i controlli del tipo "questo testo menziona X?", come contrassegnare i messaggi che contengono una parola vietata indipendentemente da come viene scritta:

<?php

$message = "Get this AMAZING deal now!";
$banned  = ["amazing", "free", "winner"];

foreach ($banned as $word) {
  if (stripos($message, $word) !== false) {
    echo "Blocked: contains '$word'\n";
    break;
  }
}

Output:

Blocked: contains 'amazing'

Funzioni correlate

FunzioneMaiuscole/minuscoleCerca da
stripos()InsensibileInizio → prima corrispondenza
strpos()SensibileInizio → prima corrispondenza
strripos()InsensibileFine → ultima corrispondenza
stristr()InsensibileRestituisce la sottostringa corrispondente, non la sua posizione

Vedi anche substr() per estrarre testo una volta che hai una posizione, e str_replace() per sostituzioni con distinzione tra maiuscole e minuscole.

Conclusione

stripos() restituisce la posizione a base zero della prima corrispondenza senza distinzione di maiuscole di una sottostringa, oppure false se non ne esiste nessuna. Ricorda di testare il risultato con !== false affinché una corrispondenza alla posizione 0 non venga scambiata per "non trovata", usa $offset per trovare occorrenze successive e ricorri a strpos() quando le maiuscole contano.

Pratica

Pratica
Cosa fa la funzione stripos() in PHP?
Cosa fa la funzione stripos() in PHP?
Was this page helpful?