RegEx Tester: Strumento Online per Testare Espressioni Regolari
Guida completa al RegEx Tester: testa espressioni regolari in tempo reale. Pattern italiani (codice fiscale, P.IVA, CAP), esempi JavaScript/Python/PHP e best practices.
RegEx Tester: Strumento Online per Testare Espressioni Regolari
Le espressioni regolari (regex) sono sequenze di caratteri che definiscono pattern di ricerca nel testo. Fondamentali per sviluppatori, data analyst e chiunque lavori con elaborazione di testo, le regex permettono di validare input, estrarre dati, fare ricerca e sostituzione avanzata.
Il nostro RegEx Tester online è completamente gratuito, veloce e privacy-first: processa tutto nel browser senza inviare dati a server esterni. Ideale per testare, debuggare e perfezionare le tue espressioni regolari in tempo reale.
Cos'è un'Espressione Regolare
Un'espressione regolare (regex o regexp) è un pattern che descrive un insieme di stringhe di testo. Invece di cercare una stringa esatta, una regex definisce regole generali che il testo deve rispettare.
Esempio Base
// Cercare stringa esatta
"hello" → trova solo "hello"
// Regex con pattern
/hel+o/ → trova "helo", "hello", "helllo", "hellllo"...
/h[ae]llo/ → trova "hallo" e "hello"
/\d{3}-\d{4}/ → trova "123-4567" (formato telefono)
Componenti Fondamentali
- Caratteri letterali: `abc` cerca esattamente "abc"
- Metacaratteri: `.` (qualsiasi), `*` (zero o più), `+` (uno o più), `?` (opzionale)
- Classi di caratteri: `[abc]` (a o b o c), `[0-9]` (cifra), `[a-z]` (lettera minuscola)
- Ancore: `^` (inizio), `$` (fine), `\b` (word boundary)
- Gruppi: `(abc)` (gruppo di cattura), `(?:abc)` (gruppo non-cattura)
- Quantificatori: `{3}` (esattamente 3), `{2,5}` (da 2 a 5), `{3,}` (3 o più)
Casi d'Uso delle Espressioni Regolari
1. Validazione Input Utente
Verificare che i dati inseriti rispettino un formato specifico:
// Email
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
// Telefono italiano (+39 o 0039)
/^(\+39|0039)?\s?3\d{2}\s?\d{6,7}$/
// Codice Fiscale italiano
/^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/
// Partita IVA italiana
/^IT\d{11}$/
// CAP italiano (5 cifre)
/^\d{5}$/
// IBAN italiano
/^IT\d{2}[A-Z]\d{10}[A-Z0-9]{12}$/
Caso pratico: Form di registrazione che valida email, telefono e codice fiscale prima dell'invio al server.
2. Estrazione Dati da Testo
Estrarre informazioni strutturate da testo non strutturato:
// Estrarre tutti gli indirizzi email da un documento
const text = "Contattaci: info@example.com oppure support@test.it"
const emails = text.match(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g)
// → ["info@example.com", "support@test.it"]
// Estrarre prezzi in Euro
const prices = text.match(/€\s?\d+[.,]?\d*/g)
// Estrarre date formato DD/MM/YYYY
const dates = text.match(/\d{2}\/\d{2}\/\d{4}/g)
Caso pratico: Parsing di log file per estrarre timestamp, IP address, codici di errore.
3. Ricerca e Sostituzione Avanzata
Modificare testo in modo intelligente usando gruppi di cattura:
// Convertire date da DD/MM/YYYY a YYYY-MM-DD
const text = "Scadenza: 25/12/2024"
text.replace(/(\d{2})\/(\d{2})\/(\d{4})/g, '$3-$2-$1')
// → "Scadenza: 2024-12-25"
// Anonimizzare numeri di telefono
text.replace(/3\d{2}\s?\d{6,7}/g, '3XX XXXXXXX')
// Formattare codici fiscali (aggiungere spazi)
"RSSMRA85M01H501Z".replace(/([A-Z]{6})(\d{2})([A-Z])(\d{2})([A-Z]\d{3}[A-Z])/, '$1 $2$3$4 $5')
// → "RSSMRA 85M01 H501Z"
Caso pratico: Editor di testo che converte automaticamente formati di data, normalizza numeri di telefono, censura dati sensibili.
4. Parsing e Validazione File di Configurazione
Leggere e validare formati strutturati (CSV, INI, env):
// Parsing file .env
KEY=value → /^([A-Z_]+)=(.*)$/
// Validare riga CSV
"nome,cognome,email" → /^[^,]+,[^,]+,[^,]+$/
// Estrarre variabili da template
"Hello {{name}}, welcome!" → /\{\{(\w+)\}\}/g
5. Web Scraping e Data Mining
Estrarre dati strutturati da HTML, XML, JSON embedded:
// Estrarre URL da tag
/
6. Sicurezza e Sanitizzazione Input
Rilevare e bloccare pattern pericolosi:
// Rilevare SQL injection
/(\bOR\b|\bAND\b|--|;|\/\*|\*\/|xp_|sp_)/i
// Rilevare XSS
/
7. Analisi Log e Monitoring
Filtrare e analizzare log di sistema, web server, applicazioni:
// Apache/Nginx access log
/^(\S+) \S+ \S+ \[([\w:\/]+\s[+\-]\d{4})\] "(\S+)\s?(\S+)?\s?(\S+)?" (\d{3})/
// Estrarre errori da log applicativo
/ERROR.*Exception: (.+)/
// Monitoring performance (tempi di risposta > 1000ms)
/response_time: (\d{4,})/
Come Usare il RegEx Tester di THEJORD
Interfaccia Principale
- Apri il RegEx Tester
- Pattern RegEx: Inserisci la tua espressione regolare (es. `/\d{3}-\d{4}/`)
- Flags: Seleziona opzioni:
g(global): Trova tutte le occorrenzei(case-insensitive): Ignora maiuscole/minuscolem(multiline): `^` e `$` matchano inizio/fine rigas(dotAll): `.` matcha anche newlineu(unicode): Supporto pieno Unicode
- Test String: Inserisci il testo da testare
- Vedi risultati in tempo reale con evidenziazione match
Funzionalità Avanzate
- Match Groups: Visualizza gruppi di cattura `(...)` estratti
- Replace Mode: Testa sostituzioni con `$1`, `$2` per gruppi
- Pattern Library: Template predefiniti per casi comuni (email, URL, telefono, codice fiscale)
- Debug Mode: Visualizza step-by-step come la regex matcha il testo
- Performance: Warning se regex è inefficiente (ReDoS risk)
Esempio Pratico: Validare Email
// 1. Inserisci pattern
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
// 2. Flags: nessuno (match case-sensitive)
// 3. Test string
mario.rossi@example.com
MARIO@EXAMPLE.IT
invalid-email
test@subdomain.example.co.uk
// 4. Risultati
✅ mario.rossi@example.com (match completo)
✅ MARIO@EXAMPLE.IT (match completo)
❌ invalid-email (no match)
✅ test@subdomain.example.co.uk (match completo)
Esempi di Codice
JavaScript
// Test regex
const regex = /^3\d{2}\s?\d{6,7}$/
regex.test('333 1234567') // true
regex.test('02 12345') // false
// Estrazione con match()
const text = "Email: test@example.com, info@test.it"
const emails = text.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/gi)
console.log(emails) // ["test@example.com", "info@test.it"]
// Replace con gruppi di cattura
const data = "25/12/2024"
const formatted = data.replace(/(\d{2})\/(\d{2})\/(\d{4})/, '$3-$2-$1')
console.log(formatted) // "2024-12-25"
// Validazione form in React
function validateEmail(email) {
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
return regex.test(email)
}
// Estrazione gruppi con exec()
const regex = /(\d{2})\/(\d{2})\/(\d{4})/
const match = regex.exec("Data: 25/12/2024")
if (match) {
console.log(`Giorno: ${match[1]}, Mese: ${match[2]}, Anno: ${match[3]}`)
}
Python
import re
# Test regex
pattern = r'^3\d{2}\s?\d{6,7}$'
re.match(pattern, '333 1234567') # Match object
re.match(pattern, '02 12345') # None
# Estrazione
text = "Email: test@example.com, info@test.it"
emails = re.findall(r'[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}', text, re.IGNORECASE)
print(emails) # ['test@example.com', 'info@test.it']
# Replace con gruppi
data = "25/12/2024"
formatted = re.sub(r'(\d{2})/(\d{2})/(\d{4})', r'\3-\2-\1', data)
print(formatted) # "2024-12-25"
# Validazione codice fiscale
def validate_cf(cf):
pattern = r'^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$'
return bool(re.match(pattern, cf.upper()))
# Parsing log con gruppi nominati
log = '192.168.1.1 - - [10/Dec/2024:13:55:36] "GET /api/users HTTP/1.1" 200'
pattern = r'(?P\S+).*\[(?P[\w:/]+).*\] "(?P\w+) (?P\S+).*" (?P\d{3})'
match = re.search(pattern, log)
print(match.groupdict())
# {'ip': '192.168.1.1', 'date': '10/Dec/2024:13:55:36', 'method': 'GET', 'path': '/api/users', 'status': '200'}
PHP
<?php
// Test regex
$pattern = '/^3\d{2}\s?\d{6,7}$/';
preg_match($pattern, '333 1234567'); // 1 (true)
preg_match($pattern, '02 12345'); // 0 (false)
// Estrazione
$text = "Email: test@example.com, info@test.it";
preg_match_all('/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i', $text, $matches);
print_r($matches[0]); // Array(['test@example.com', 'info@test.it'])
// Replace
$data = "25/12/2024";
$formatted = preg_replace('/(\d{2})\/(\d{2})\/(\d{4})/', '$3-$2-$1', $data);
echo $formatted; // "2024-12-25"
// Validazione Partita IVA
function validatePIVA($piva) {
return preg_match('/^IT\d{11}$/', $piva);
}
// Sanitizzazione input (rimuovere caratteri non alfanumerici)
$input = "Hello, World! 123";
$clean = preg_replace('/[^a-zA-Z0-9\s]/', '', $input);
echo $clean; // "Hello World 123"
?>
Pattern RegEx Comuni per l'Italia
| Tipo | Pattern | Esempio Match |
|---|---|---|
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ |
mario@example.it | |
| Telefono Mobile | /^(\+39|0039)?3\d{2}\s?\d{6,7}$/ |
+39 333 1234567 |
| Telefono Fisso | /^(\+39|0039)?0\d{1,3}\s?\d{6,8}$/ |
02 12345678 |
| Codice Fiscale | /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/ |
RSSMRA85M01H501Z |
| Partita IVA | /^IT\d{11}$/ |
IT12345678901 |
| CAP | /^\d{5}$/ |
00100 |
| IBAN Italiano | /^IT\d{2}[A-Z]\d{10}[A-Z0-9]{12}$/ |
IT60X0542811101000000123456 |
| Targa Auto | /^[A-Z]{2}\d{3}[A-Z]{2}$/ |
AB123CD |
| URL | /^https?:\/\/[a-z0-9.-]+\.[a-z]{2,}/i |
https://thejord.it |
| Data DD/MM/YYYY | /^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[012])\/\d{4}$/ |
25/12/2024 |
Confronto RegEx Tester
| Tool | Highlights | Replace | Groups | Performance Warning | Library |
|---|---|---|---|---|---|
| THEJORD | ✅ | ✅ | ✅ | ✅ | ✅ IT patterns |
| Regex101 | ✅ | ✅ | ✅ | ✅ | ✅ Multi-lang |
| RegExr | ✅ | ✅ | ✅ | ❌ | ✅ |
| RegexPal | ✅ | ❌ | ✅ | ❌ | ❌ |
Quando Usare THEJORD RegEx Tester
- ✅ Privacy-first: Nessun dato inviato a server esterni (tutto in locale)
- ✅ Pattern italiani: Library con regex per codice fiscale, P.IVA, CAP, IBAN
- ✅ Fast: Nessun loading, elaborazione istantanea
- ✅ Gratuito: Nessun limite di utilizzo o registrazione
- ✅ Multi-language: Supporto JavaScript, Python, PHP, Java syntax
Best Practices e Performance
⚠️ Evitare Catastrophic Backtracking (ReDoS)
Alcune regex possono causare esecuzione esponenziale su input specifici:
// ❌ PERICOLOSO - ReDoS vulnerability
/(a+)+b/
/(\w+\s?)*$/
// ✅ SICURO - Quantificatori non annidati
/a+b/
/[\w\s]+$/
Regola: Evita quantificatori annidati `(a+)+`, `(a*)*`, `(a+)*`.
✅ Ottimizzare le Regex
- Usa ancore: `^` e `$` limitano il matching
- Classi specifiche: `\d` invece di `[0-9]`, `\w` invece di `[a-zA-Z0-9_]`
- Gruppi non-cattura: `(?:...)` invece di `(...)` se non serve estrarre
- Alternanza efficiente: `(jpg|png|gif)` invece di `(jpg)|(png)|(gif)`
🧪 Testare Edge Cases
Verifica sempre con input limite:
- Stringa vuota: `""`
- Un solo carattere: `"a"`
- Caratteri speciali: `"!@#$%"`
- Unicode/emoji: `"hello 👋"`
- Molto lungo: 10.000+ caratteri
- Newline e tab: `"hello\nworld\t"`
Domande Frequenti (FAQ)
Qual è la differenza tra /g e senza flag g?
Senza `g`, la regex si ferma al primo match. Con `g` (global), trova tutte le occorrenze nel testo.
const text = "cat bat rat"
text.match(/at/) // ["at"] (solo primo match)
text.match(/at/g) // ["at", "at", "at"] (tutti i match)
Come faccio a matchare un carattere speciale come . o *?
Usa il backslash `\` per fare escape dei metacaratteri:
/\./ → matcha il punto letterale "."
/\*/ → matcha asterisco "*"
/\+/ → matcha più "+"
/\(/ → matcha parentesi tonda "("
Regex per validare password sicura?
// Min 8 caratteri, almeno: 1 maiuscola, 1 minuscola, 1 numero, 1 speciale
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/
Spiegazione: Usa lookahead positivo `(?=...)` per verificare ogni condizione senza consumare caratteri.
Come estrarre contenuto tra tag HTML?
⚠️ Attenzione: Le regex NON sono adatte per parsing HTML complesso. Per HTML usa un parser (DOMParser, Cheerio, BeautifulSoup).
Per casi semplici:
// Estrarre testo in
/
(.*?)<\/p>/gs
// Estrarre href da
/
Differenza tra .* e .*? (greedy vs lazy)?
.*(greedy): Matcha il massimo possibile.*?(lazy): Matcha il minimo possibile
Input: "hello
world
"
/.*<\/p>/ → match: "
hello
world
" (tutto)
/.*?<\/p>/ → match: "
hello
" (solo primo tag)
Posso usare regex per validare email al 100%?
No. L'RFC 5322 (standard email) permette casi molto complessi. La regex completa è lunga 6000+ caratteri. Per produzione:
- ✅ Usa regex semplice per validazione basic:
/^[^\s@]+@[^\s@]+\.[^\s@]+$/ - ✅ Invia email di verifica per conferma reale
- ❌ Non cercare la "regex perfetta" per email
Le regex sono case-sensitive?
Di default sì. Usa il flag `i` per ignorare maiuscole/minuscole:
/hello/.test("HELLO") // false
/hello/i.test("HELLO") // true
Risorse Correlate
Esplora altri strumenti utili di THEJORD:
- Diff Checker: Confronta testi e verifica differenze tra pattern regex
- JSON Formatter: Valida JSON con regex per chiavi/valori
- Hash Generator: Genera hash per verificare integrità di pattern estratti
- URL Encoder: Codifica URL estratti con regex