{n}, {n,} și {n,m} (număr exact de repetiții) în Expresii Regulare (RegEx)

Cuantificatori (repetiții) PCRE / ECMAScript / POSIX

Controlează precis de câte ori trebuie să se repete un caracter sau un grup: exact n, minim n sau între n și m ori.

Tipar RegEx
X{n}   |   X{n,}   |   X{n,m}

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ărului 12345678 (primele 4 cifre 1234)!
  • 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