PHP e gestione delle stringhe: lavorare con espressioni regolari in modo pratico

by theArchitect
SHARE
PHP e gestione delle stringhe: lavorare con espressioni regolari in modo pratico
© Guida-HTML5.it

Introduzione

Quando si parla di gestione delle stringhe in PHP, spesso si pensa alle funzioni più comuni come strlen(), strpos() o substr(). Tuttavia, in molti scenari reali queste funzioni non bastano: validare un formato, estrarre parti da un testo, cercare pattern complessi o ripulire input non uniforme richiede uno strumento più potente.

In questo tutorial ci concentriamo su un sotto-argomento molto utile e spesso sottovalutato: le espressioni regolari con PCRE in PHP. Si tratta di una tecnica fondamentale per chi sviluppa applicazioni web, perché permette di analizzare e manipolare stringhe in modo preciso e flessibile.

Vedremo un esempio concreto: validare e normalizzare dati testuali provenienti da un modulo, come email, codici prodotto e numeri di telefono. L’obiettivo non è imparare “tutte” le regex, ma capire come usarle bene in PHP per risolvere problemi reali.

Codice completo

<?php

// Esempio pratico: validazione e normalizzazione di alcuni dati utente
// usando funzioni PCRE in PHP.

$input = [
    ´nome´ => ´  mario   rossi ´,
    ´email´ => ´[email protected]´,
    ´telefono´ => ´+39 333-123 4567´,
    ´codice_prodotto´ => ´PRD-2025-AB12´,
    ´note´ => "Cliente VIPnRichiede supporto prioritario"
];

// 1) Normalizzazione del nome: spazi multipli ridotti a uno solo
$nomeNormalizzato = preg_replace(´/s+/´, ´ ´, trim($input[´nome´]));

// 2) Validazione email con regex semplice e pratica
$patternEmail = ´/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/´;

if (preg_match($patternEmail, $input[´email´])) {
    $emailValida = true;
} else {
    $emailValida = false;
}

// 3) Pulizia del numero di telefono: rimuove tutto tranne cifre e simbolo +
$telefonoPulito = preg_replace(´/(?!^+)[^d]/´, ´´, $input[´telefono´]);

// 4) Estrazione di un codice prodotto con formato specifico
// Formato atteso: PRD-YYYY-XXXX dove X sono lettere o numeri
$patternProdotto = ´/^(PRD)-(d{4})-([A-Z0-9]{4})$/´;

if (preg_match($patternProdotto, $input[´codice_prodotto´], $matches)) {
    $prefisso = $matches[1];
    $anno = $matches[2];
    $seriale = $matches[3];
} else {
    $prefisso = null;
    $anno = null;
    $seriale = null;
}

// 5) Verifica presenza di una parola chiave nelle note
if (preg_match(´/bVIPb/´, $input[´note´])) {
    $haPriorita = true;
} else {
    $haPriorita = false;
}

// 6) Creazione di una versione compatta delle note
$noteCompatte = preg_replace(´/s+/´, ´ ´, trim($input[´note´]));

// Output finale
echo "<h3>Dati elaborati</h3>";
echo "<p>Nome: " . htmlspecialchars($nomeNormalizzato) . "</p>";
echo "<p>Email valida: " . ($emailValida ? ´sì´ : ´no´) . "</p>";
echo "<p>Telefono pulito: " . htmlspecialchars($telefonoPulito) . "</p>";
echo "<p>Codice prodotto: " . htmlspecialchars($input[´codice_prodotto´]) . "</p>";
echo "<p>Prefisso: " . htmlspecialchars((string)$prefisso) . "</p>";
echo "<p>Anno: " . htmlspecialchars((string)$anno) . "</p>";
echo "<p>Seriale: " . htmlspecialchars((string)$seriale) . "</p>";
echo "<p>Priorità: " . ($haPriorita ? ´alta´ : ´normale´) . "</p>";
echo "<p>Note compatte: " . htmlspecialchars($noteCompatte) . "</p>";

Spiegazione

Il cuore di questo esempio è l’uso di tre funzioni principali:

  • preg_match(): cerca un pattern all’interno di una stringa e restituisce 1 se trova corrispondenza, 0 altrimenti.
  • preg_replace(): sostituisce parti della stringa che corrispondono al pattern.
  • preg_match() con array di output: permette anche di catturare gruppi specifici del testo trovato.

1. Normalizzare il nome

Spesso i dati inseriti dagli utenti contengono spazi iniziali, finali o multipli. Con trim() eliminiamo gli spazi ai bordi, mentre con preg_replace(´/s+/´, ´ ´, ...) riduciamo qualsiasi sequenza di spazi, tab o a capo a un singolo spazio.

Questo è molto utile per rendere i dati uniformi prima di salvarli nel database o mostrarli in interfaccia.

2. Validare l’email

La regex usata per l’email è volutamente semplice. Non pretende di coprire ogni caso teorico previsto dallo standard, ma è adatta a un controllo pratico lato applicazione:

  • accetta lettere, numeri e alcuni simboli comuni nella parte locale;
  • richiede il simbolo @;
  • richiede un dominio con estensione di almeno 2 caratteri.

In PHP, per la validazione di email, spesso conviene usare anche filter_var($email, FILTER_VALIDATE_EMAIL). Le regex restano comunque utili quando hai bisogno di regole personalizzate.

3. Pulire il numero di telefono

Il numero di telefono può arrivare con spazi, trattini e altri separatori. La regex /(?!^+)[^d]/ rimuove tutto ciò che non è una cifra, mantenendo però il simbolo + se si trova all’inizio.

Questo è un esempio di come le regex possano essere usate non solo per cercare, ma anche per normalizzare dati in ingresso.

4. Estrarre gruppi da un codice prodotto

La regex /^(PRD)-(d{4})-([A-Z0-9]{4})$/ controlla un formato molto preciso:

  • PRD come prefisso fisso;
  • d{4} per quattro cifre;
  • [A-Z0-9]{4} per quattro caratteri alfanumerici maiuscoli.

Grazie alle parentesi tonde, PHP salva i gruppi catturati nell’array $matches. In questo modo puoi separare facilmente le componenti del codice senza dover fare ulteriori operazioni manuali sulla stringa.

5. Cercare una parola chiave esatta

La regex /bVIPb/ usa b, che indica un confine di parola. Questo evita falsi positivi: ad esempio, non troverà “VIP” dentro una parola più lunga come “VIPSpecial”.

È una tecnica utile quando vuoi cercare termini precisi in descrizioni, note, commenti o contenuti editoriali.

Best practice

  • Usa regex quando servono pattern complessi, non per operazioni semplici che si possono risolvere con funzioni base.
  • Commenta sempre le espressioni regolari più importanti: una regex non documentata diventa difficile da mantenere.
  • Evita pattern troppo permissivi se stai validando dati critici come email, codici o identificativi.
  • Testa i casi limite: stringhe vuote, spazi extra, caratteri speciali, formati incompleti.
  • Preferisci la leggibilità alla “furbizia”: una regex chiara e leggermente più lunga è meglio di una molto compatta ma incomprensibile.
  • Usa htmlspecialchars() quando stampi dati derivati da input utente, per evitare problemi di sicurezza lato output HTML.
  • Per la validazione standard, valuta prima le funzioni native PHP come filter_var() e usa le regex per regole specifiche.

Riepilogo

Le espressioni regolari sono uno strumento potente per la gestione delle stringhe in PHP. Ti permettono di:

  • validare formati testuali;
  • estrarre informazioni da stringhe strutturate;
  • ripulire dati sporchi o incoerenti;
  • cercare pattern specifici con precisione.

Nel tutorial abbiamo visto un caso d’uso concreto: normalizzazione del nome, validazione email, pulizia del telefono, parsing di un codice prodotto e ricerca di parole chiave nelle note. Sono operazioni tipiche di applicazioni reali, dove le stringhe arrivano quasi sempre in formati imperfetti.

Se impari a usare bene preg_match() e preg_replace(), avrai un vantaggio enorme nella gestione di input, log, contenuti editoriali e dati provenienti da API o form.

Approfondisci con risorse ufficiali

  • Manuale PHP - PCRE: documentazione ufficiale sulle espressioni regolari supportate da PHP.
  • preg_match(): per cercare corrispondenze e catturare gruppi.
  • preg_replace(): per sostituire parti di stringa in base a un pattern.
  • preg_split(): utile quando vuoi dividere una stringa usando un pattern.
  • filter_var(): per validazioni standard, ad esempio email e URL.

Se vuoi, posso anche scrivere un secondo tutorial dedicato a preg_split() e all’uso delle espressioni regolari per dividere testi complessi in PHP.

SHARE