A cosa serve e come si usa questa regex?
Pattern raccomandato dagli standard W3C/HTML5 per il tag input type="email", coprendo caratteri speciali consentiti nella parte locale.
Espressione Regolare (Pattern)
Flag consigliati:
nessuno · Motori compatibili: JavaScript, PCRE/PHP, Python, Go, .NET
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
Integrazione nel codice
Snippet pronti all'uso// JavaScript (ES6+)
const regex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
const isValid = regex.test(text);
// Estrazione match
const matches = text.match(regex);
<?php
// PHP 8.2+ (PCRE)
$pattern = '~^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}\~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$~';
$isValid = (bool) preg_match($pattern, $text);
// Estrazione con gruppi
if (preg_match($pattern, $text, $matches)) {
print_r($matches);
}
# Python 3 (re)
import re
pattern = r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"
is_valid = bool(re.search(pattern, text))
# Estrazione match
match = re.search(pattern, text)
if match:
print(match.group(0))
// Go (regexp)
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`^[a-zA-Z0-9.!#$%&'*+/=?^_` + "`" + `{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$`)
isValid := re.MatchString(text)
fmt.Println(isValid)
}
// C# (.NET)
using System;
using System.Text.RegularExpressions;
bool isValid = Regex.IsMatch(text, @"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$");
Come funziona (Spiegazione dettagliata)
- Accetta tutti i caratteri validi RFC nella parte locale prima della chiocciola.
- Verifica che ogni label di dominio non superi 63 caratteri e non inizi né finisca con un trattino.
- Supporta domini di terzo, quarto livello e sottodomini complessi.
Casi d’uso consigliati
- Validazione compatibile con specifica HTML5
- Librerie di validazione backend
- Elaborazione messaggi RFC compliant
Esempi che corrispondono (Validi)
3 test passatiuser.name+tag@example.com
admin_123@sub-domain.example.co.uk
support!#%&@service.it
Esempi rifiutati (Non validi)
4 test respintiplainaddress
@missing-username.com
username@-domain.com
username@domain-.com
Limiti tecnici e avvertenze
- Non supporta parti locali tra virgolette o indirizzi IP letterali tra parentesi quadre RFC estreme.
Espressioni regolari correlate
Base
Email — validazione pratica
Regex pratica per verificare la forma sintattica di un indirizzo email comune nei form web, senza la complessità estrema di RFC 5322.
Vedi scheda
Base
Email con dominio specifico
Verifica che un indirizzo email appartenga obbligatoriamente a un dominio o a suoi sottodomini autorizzati.
Vedi scheda
Base
Estrai tutte le email da un testo
Pattern senza ancoraggi con word boundary per individuare ed estrarre tutti gli indirizzi email presenti in un testo non strutturato.
Vedi scheda
Verifica empirica
Apri nel tester
Hai bisogno di collaudare questo pattern con i tuoi dati?
Apri il tester sandboxato con questa regex già caricata e verifica i gruppi di cattura.