Introduzione
Quando si lavora con le stringhe in PHP, una delle attività più utili e frequenti è capire se un testo contiene una certa sequenza di caratteri, in quale punto compare e come reagire in base al risultato. Questo tipo di gestione è fondamentale in molti scenari reali: validazione di input, filtri sui contenuti, parsing di dati, controllo di prefissi o suffissi, analisi di log e costruzione di regole business.
In questo tutorial vedremo un sotto-argomento molto pratico e spesso sottovalutato: la ricerca e il confronto di sottostringhe. Imparerai a usare funzioni moderne e affidabili di PHP per:
- verificare se una stringa contiene un certo testo;
- controllare se una stringa inizia o termina con un valore specifico;
- trovare la posizione di una sottostringa;
- gestire correttamente i casi in cui il valore cercato non esiste;
- scrivere codice più leggibile e robusto.
Le funzioni che vedremo sono particolarmente importanti nelle versioni recenti di PHP, perché offrono alternative più chiare e sicure rispetto a vecchie tecniche basate su confronti manuali o funzioni meno immediate.
Codice completo
<?php
declare(strict_types=1);
// Esempio di dati reali
$email = ´[email protected]´;
$url = ´https://www.example.com/prodotti/php´;
$message = ´Errore: file non trovato nel percorso specificato´;
$filename = ´report_2024.pdf´;
$searchTerm = ´php´;
// 1) Verificare se una stringa contiene una sottostringa
if (str_contains($url, $searchTerm)) {
echo "L´URL contiene la parola cercata.n";
} else {
echo "L´URL non contiene la parola cercata.n";
}
// 2) Verificare se una stringa inizia con un prefisso
if (str_starts_with($email, ´mario.´)) {
echo "L´email inizia con il prefisso atteso.n";
} else {
echo "L´email non inizia con il prefisso atteso.n";
}
// 3) Verificare se una stringa termina con un suffisso
if (str_ends_with($filename, ´.pdf´)) {
echo "Il file è un PDF.n";
} else {
echo "Il file non è un PDF.n";
}
// 4) Trovare la posizione di una sottostringa
$position = strpos($message, ´file´);
if ($position !== false) {
echo "La parola ´file´ si trova alla posizione: " . $position . "n";
} else {
echo "La parola ´file´ non è presente nel messaggio.n";
}
// 5) Gestire correttamente il primo carattere di una stringa
$firstChar = $email[0];
echo "Il primo carattere dell´email è: " . $firstChar . "n";
// 6) Esempio pratico: validazione semplice di un dominio
$domain = ´example.com´;
if (str_ends_with($email, ´@´ . $domain)) {
echo "L´email appartiene al dominio consentito.n";
} else {
echo "L´email non appartiene al dominio consentito.n";
}
// 7) Esempio pratico: controllo di una rotta o path
$path = ´/prodotti/php/guide´;
if (str_starts_with($path, ´/prodotti´)) {
echo "Il path appartiene alla sezione prodotti.n";
}
// 8) Esempio pratico: ricerca in una lista di testi
$logs = [
´INFO: operazione completata´,
´WARNING: spazio disco quasi esaurito´,
´ERROR: connessione al database fallita´,
];
foreach ($logs as $log) {
if (str_contains($log, ´ERROR´)) {
echo "Trovato log di errore: " . $log . "n";
}
}
?> Spiegazione
Il codice sopra mostra le funzioni più importanti per cercare e confrontare sottostringhe in PHP. Vediamole una per una.
1. str_contains()
La funzione str_contains(string $haystack, string $needle): bool restituisce true se la stringa principale contiene la sottostringa cercata.
Nel nostro esempio:
- $url contiene ´php´;
- quindi il controllo restituisce vero.
Questa funzione è molto utile quando vuoi verificare la presenza di una parola, di un token, di un frammento di URL o di un codice identificativo.
2. str_starts_with()
La funzione str_starts_with(string $haystack, string $needle): bool controlla se una stringa inizia con un certo valore.
Nel caso dell’email, il controllo str_starts_with($email, ´mario.´) permette di verificare un prefisso. È utile per:
- controllare prefissi di codici prodotto;
- validare percorsi o route;
- riconoscere formati standardizzati.
3. str_ends_with()
La funzione str_ends_with(string $haystack, string $needle): bool verifica se una stringa termina con un suffisso specifico.
Nel nostro esempio, controlliamo se il nome file finisce con .pdf. Questo approccio è molto più chiaro rispetto a soluzioni manuali con substr(), soprattutto quando il codice deve essere letto e mantenuto da altri sviluppatori.
4. strpos()
La funzione strpos(string $haystack, string $needle): int|false restituisce la posizione della prima occorrenza della sottostringa. Se non trova nulla, restituisce false.
Qui c’è un punto importante: bisogna usare un confronto stretto con !== false, perché la posizione 0 è un valore valido ma in PHP viene considerata falsy. Se la sottostringa si trova all’inizio, strpos() restituirà 0, non false.
Questo è uno degli errori più comuni tra chi inizia a usare PHP.
5. Accesso diretto al primo carattere
Con $email[0] otteniamo il primo carattere della stringa. È una tecnica semplice, ma va usata con attenzione se la stringa potrebbe essere vuota.
Se vuoi fare controlli più robusti, conviene prima verificare che la stringa non sia vuota con strlen() o con un controllo esplicito.
6. Controlli pratici su dominio e path
Gli esempi con dominio e path mostrano come le funzioni di ricerca siano utili in casi concreti. Per esempio:
- accettare email di un certo dominio;
- riconoscere URL che appartengono a una sezione del sito;
- filtrare messaggi o log in base a parole chiave.
Questo tipo di logica è molto comune in applicazioni web, API e sistemi di monitoraggio.
Best practice
Quando lavori con la ricerca di sottostringhe in PHP, alcune buone abitudini fanno davvero la differenza.
- Usa le funzioni moderne: str_contains(), str_starts_with() e str_ends_with() rendono il codice più leggibile rispetto a soluzioni manuali.
- Controlla sempre il valore false con strpos(): usa !== false, non un semplice if ($pos).
- Valuta la sensibilità al maiuscolo/minuscolo: queste funzioni sono case-sensitive. Se ti serve un confronto non sensibile al maiuscolo, devi normalizzare i dati o usare funzioni dedicate.
- Gestisci stringhe vuote: prima di accedere a un indice come $string[0], verifica che la stringa contenga davvero caratteri.
- Preferisci codice esplicito: un controllo chiaro è più facile da mantenere di una logica compatta ma poco leggibile.
- Usa questi controlli in validazione e filtro, non come unica sicurezza: per esempio, controllare un suffisso può aiutare, ma non sostituisce una validazione completa del file o del contenuto.
Un altro suggerimento utile è quello di centralizzare i controlli ripetuti in funzioni dedicate. Se nella tua applicazione controlli spesso prefissi, suffissi o parole chiave, incapsulare la logica in helper rende il progetto più ordinato.
Riepilogo
La ricerca e il confronto di sottostringhe sono operazioni fondamentali nella gestione delle stringhe in PHP. Con poche funzioni puoi risolvere molti problemi pratici in modo chiaro ed efficace.
- str_contains() serve per verificare la presenza di un testo.
- str_starts_with() controlla il prefisso di una stringa.
- str_ends_with() controlla il suffisso.
- strpos() restituisce la posizione della prima occorrenza.
- Usa sempre confronti corretti per distinguere tra 0 e false.
Se impari a usare bene questi strumenti, il tuo codice PHP sarà più leggibile, più sicuro e più facile da mantenere. Sono funzioni semplici, ma nei progetti reali fanno una grande differenza.
Approfondisci con risorse ufficiali
- PHP Manual - str_contains(): documentazione ufficiale della funzione di ricerca contenimento.
- PHP Manual - str_starts_with(): riferimento ufficiale per il controllo dei prefissi.
- PHP Manual - str_ends_with(): documentazione per il controllo dei suffissi.
- PHP Manual - strpos(): dettagli sul recupero della posizione di una sottostringa.
- PHP Manual - String Functions: panoramica completa delle funzioni per la gestione delle stringhe.
Se vuoi, nel prossimo tutorial possiamo approfondire un altro tema molto utile: confronto tra stringhe in PHP con normalizzazione, maiuscole/minuscole e Unicode.
