La véritable force des expressions régulières réside dans les possibilités qu'elles offrent pour constituer des modèles de recherche très généraux, dans lesquelles les chaînes recherchées n'ont pas besoin d'être définies précisément, mais peuvent plutôt être décrites comme des suites de caractères acceptables, dont les répétitions peuvent être laissées libres (un chiffre de 1 à 9999 par exemple) ou au contraire fixées car connues et devant répondre à un masque bien particulier (une adresse email par exemple).
Des régles de répétition de caractères, ou de groupes de caractères, permettent ainsi d'écrire à partir de modèles simples des expressions régulières complexes. Les modèles ainsi définis étendent les capacités de recherche et de substitution à un grand nombre de cas et de chaînes.

Répétitions fixées de caractères

Les accolades ouvrantes et fermantes ({ et }) permettent de définir la répétition de caractères, de classes ou de modèles.

Par exemple, l'expression régulière /il{2}/ recherchera un i suivi de 2 l. Elle sera vraie pour "Djedaille", et fausse pour "il".

Pour tester qu'un code postal français est correct, l'expression régulière peut être /\d{5}/,
équivalente à /[[:digit:]]{5}/,
équivalente à /[0-9]{5}/.

Pour tester qu'une date qu'une date est formatée suivant le modèle JJ/MM/AAAA, l'expression régulière sera /\d{2}\/\d{2}\/\d{4}/ (je vous laisse trouver les équivalences).
Notez le backslash (\) de protection devant les slash (/) séparant le jour, le mois et l'année.

Exemple : répétitions fixées de caractères

Exercice : vérifier le format d'un numéro de carte bancaire

Les numéros de cartes bancaires sont constitués par un préfixe indiquant le type de carte, suivi d'un nombre variable de chiffres.

Type de carte

Préfixe

Nombre total
de chiffres

MasterCard

de 51 à 55

16

Visa

4

13 ou 16

AMEX

34 ou 37

15

DinnersClub

de 300 à 305,
ou 36 ou 38

14

Discover

6011

16

enRoute

2014 ou 2149

15

JCB

3

16

2131 ou 1800

15

Votre mission si vous l'acceptez, n'est pas de créer des faux numéros de cartes bancaires, mais d'écrire une expression régulière par type de carte qui permette de vérifier que le numéro donné est correcte par rapport au format attendu.

Pour vous aider ...

Si on imagine que le numéro de carte a été saisi par l'utilisateur au travers d'une zone de formulaire, il peut être précédé et/ou suivi d'espaces ou d'autres caractères. Il nous faut donc d'abord être sûr que le numéro que nous testons n'est pas "pollué" par d'autres caractères.
Nous devons donc constuire une régle qui définit que la valeur à tester commence obligatoirement par certains caractères, et se termine obligatoirement par certains autres caractères.

On spécifie qu'une chaîne doit commencer par un caractère précis avec le métacaractère ^.
Par exemple /^a/ indique que la chaîne à tester doit commencer obligatoirement par a.

On spécifie qu'une chaîne doit finir par un caractère précis avec le métacaractère $ .
Par exemple /z$/ indique que la chaîne à tester doit se terminer obligatoirement par z.

Ainsi l'expression régulière /^\d{10}$/ indique que la chaîne à tester doit se composer d'un nombre de dix chiffres, ni plus, ni moins, et à l'exclusion de tout caractère non numérique.

L'expression régulière pour tester le format d'une carte de type Discover sera donc : /^6011\d{12}$/
^6011 indique que le numéro doit commencer par 6011
\d{12}$ indique que le numéro doit se terminer par 12 chiffres.

Une solution possible

Exercice : tester un numéro de carte bancaire