Ce face {n}, {n,} și {n,m} (număr exact de repetiții)
Acoladele {...} oferă control numeric exact asupra numărului de repetiții ale elementului precedent. Există trei forme: {n} cere exact n apariții, {n,} cere cel puțin n apariții (fără limită superioară), iar {n,m} cere între n și m apariții (inclusiv).
Acești cuantificatori sunt indispensabili în validările de date cu lungime fixă sau limitată: CNP (\d{13}), cod poștal în România (\d{6}), ani (\d{4}), username-uri de 3–20 caractere (\w{3,20}) sau parole de minim 8 caractere (.{8,}).
Variante și sintaxă asociată
| Expresie / Simbol | Descriere |
|---|---|
X{n} |
Potrivește X repetat de exact n ori (ex. \d{6} pentru 6 cifre). |
X{n,} |
Potrivește X repetat de cel puțin n ori (ex. .{8,} pentru minim 8 caractere). |
X{n,m} |
Potrivește X repetat de minim n și maxim m ori (ex. [a-z]{2,4}). |
X{0,m} |
Potrivește X de cel mult m ori (echivalent cu 0 până la m apariții). |
X{n,m}? |
Variantă lazy: se oprește la numărul minim n dacă restul expresiei potrivește. |
Exemple
Exemplul 1: Extragerea codurilor poștale de exact 6 cifre
Folosim \b\d{6}\b cu limite de cuvânt pentru a nu potrivi primele 6 cifre dintr-un CNP de 13 cifre.
Expresie: /\b\d{6}\b/g
Text: "Cod poștal București: 010101, Cluj: 400001, CNP: 1900101123456"
Potriviri găsite (Matches)
Match 1: "010101"
Match 2: "400001"
(CNP-ul de 13 cifre este ignorat datorită limitelor \b)
Exemplul 2: Validarea unui username între 4 și 16 caractere
Ancorăm expresia cu ^ și $ pentru a verifica lungimea întregului șir.
Expresie: /^[a-zA-Z0-9_]{4,16}$/
Teste: "ana" (3 chr), "alex_2026" (9 chr), "un_username_mult_prea_lung_123" (30 chr)
Potriviri găsite (Matches)
"ana" -> INVALID (sub 4 caractere)
"alex_2026" -> VALID (9 caractere)
"un_username_mult_prea_lung_123" -> INVALID (peste 16 caractere)
Greșeli frecvente
- Folosirea lui
\d{4}fără ancore (^...$) sau fără limite de cuvânt (\b): expresia/\d{4}/va găsi o potrivire și în interiorul numărului12345678(primele 4 cifre1234)! - Adăugarea de spații în interiorul acoladelor (ex.
\d{2, 5}în loc de\d{2,5}): în majoritatea motoarelor RegEx, spațiul după virgulă invalidează cuantificatorul și îl transformă în text literal.
Simboluri și rețete înrudite
+ ș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 (*).? (opțional: 0 sau 1): Marchează elementul precedent ca fiind opțional (poate apărea de 0 ori sau cel mult 1 dată).\b și \B (limită de cuvânt): Potrivește poziția de graniță dintre un cuvânt și un non-cuvânt (\b) sau o poziție din interiorul cuvântului (\B).^ ș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.