Ce face Rețetă RegEx: Validare Email și URL
Validarea adreselor de email și a URL-urilor este cel mai des întâlnit caz de utilizare pentru expresiile regulare în dezvoltarea web. În practică, nu încerca să copiezi expresii kilometrice de 6.000 de caractere care încearcă să implementeze întregul standard RFC 5322 (care permite comentarii și adrese IP între paranteze pătrate), ci folosește o expresie pragmatică, rapidă și imună la ReDoS (Regular Expression Denial of Service).
În PHP pe backend, pentru validarea strictă a unui email sau URL poți combina sau înlocui RegEx-ul cu filter_var($email, FILTER_VALIDATE_EMAIL), însă expresiile de mai jos sunt indispensabile în JavaScript (validare instantanee în formular), în baze de date sau atunci când vrei să extragi toate emailurile/linkurile dintr-un text mai lung.
Variante și sintaxă asociată
| Expresie / Simbol | Descriere |
|---|---|
[a-zA-Z0-9._%+-]+ |
Partea locală a emailului (înainte de @): acceptă litere, cifre, punct, plus (subaddressing) și cratimă. |
@[a-zA-Z0-9.-]+ |
Simbolul @ urmat de numele domeniului și eventuale subdomenii. |
\.[a-zA-Z]{2,} |
Punct literal urmat de extensia TLD de minim 2 litere (.ro, .com, .museum, .tech). |
https?:// |
Protocolul URL obligatoriu (http:// sau https://). |
[^\s/$.?#].[^\s]* |
Restul URL-ului fără spații albe, potrivit pentru extragerea linkurilor din text. |
Exemple
Exemplul 1: Validarea unei adrese de email (ancorată cu ^ și $)
Acceptă adrese standard și alias-uri cu + (ex. nume+newsletter@domeniu.ro) și respinge spațiile sau lipsa TLD-ului.
Expresie validare: /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/
Teste:
"contact@dexblog.ro" -> VALID
"ion.popescu+shop@firma.co.uk" -> VALID
"utilizator@domeniu" -> INVALID (lipsește extensia .ro/.com)
"nume..dublu@@test.ro" -> INVALID (două simboluri @)
Potriviri găsite (Matches)
Potrivește doar adresele complet valide de la începutul până la sfârșitul șirului.
Pentru a EXTRAGE emailuri dintr-un text, elimină ^ și $ și adaugă flag-ul g:
/[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}/g
Exemplul 2: Validarea și extragerea URL-urilor HTTP / HTTPS cu port, cale și query string
Expresia verifică protocolul, domeniul, portul opțional și calea, capturând domeniul în grupul 1.
Expresie validare URL:
/^https?:\/\/(?:www\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(?::\d{1,5})?(?:\/[^\s]*)?$/i
Expresie transformare linkuri în <a> (auto-link în text):
$html = preg_replace(
'~\b(https?://[^\s<>"\']+[^\s<>"\'.,;!?])~i',
'<a href="$1">$1</a>',
$text
);
Potriviri găsite (Matches)
Input: "Vizitează https://www.dexblog.ro/invata/regex/ pentru detalii."
Output: "Vizitează <a href="https://www.dexblog.ro/invata/regex/">https://www.dexblog.ro/invata/regex/</a> pentru detalii."
Greșeli frecvente
- Omisiunea semnului
+din clasa părții locale a emailului ([a-zA-Z0-9._-]în loc de[a-zA-Z0-9._%+-]): respingerea semnului+blochează utilizatorii de Gmail/Outlook care folosesc adrese de tipnume+site@gmail.com. - Limitarea TLD-ului la 2–4 litere (
\.[a-z]{2,4}$): extensiile moderne precum.online,.digital,.studiosau.ro.comau mai mult de 4 caractere. Folosește{2,63}sau{2,}.
Simboluri și rețete înrudite
Rețetă RegEx: Telefon RO, CNP și IBAN: Șabloane RegEx adaptate pentru România: numere de telefon mobil/fix (+40 / 07xx), Cod Numeric Personal (CNP) și conturi IBAN RO.^ și $ (început și sfârșit de șir / linie): Ancorează potrivirea la începutul (^) și/sau la sfârșitul ($) șirului de text sau al fiecărui rând.[abc] și [a-z0-9] (seturi și intervale): Definește o clasă personalizată de caractere din care se potrivește un singur caracter.+ și * (unu sau mai multe / zero sau mai multe): Specifică repetarea elementului precedent de cel puțin o dată (+) sau de zero ori mai multe ori (*).
Întrebări & Exemple de Cod:
Rețetă RegEx: Validare Email și URLAi o nelămurire despre utilizarea comenzii
Rețetă RegEx: Validare Email și URLsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.