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.
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.
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 |
|
MasterCard |
de 51 à 55 |
16 |
|
Visa |
4 |
13 ou 16 |
|
AMEX |
34 ou 37 |
15 |
|
DinnersClub |
de 300 à 305, |
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.