Les Regex, la solution qui optimise tout votre code :)
Les regex sont des petits choses qui permettent à un développeur, de récupérer des données, ou bien de tester si une valeur est formaté de tel ou tel manière, sans avoir à passer par des fonctions de conversion en tableau, des test de chaîne de caractère, ....
Je m'explique :
Admettons, que vous souhaitez créer un formulaire qui check si le mail d'un utilisateur est correct.
La Regex devrait ressembler plus ou moins à ça :
[a-z]{1,9}@([a-z^_.-]{1,12}).(.fr|.com)
Bon je l'admet au premier abords on se dit WHAAAAT !
Mais si je vous décortique :
le premier bloc [a-z]{1,9}
J'indique que je veux que cette partie contiennent entre 1 et 9 caractère qui sont compris entre "a" et "z"
Je pourrais également indiquer que les majuscules sont acceptées :
[a-zA-Z]{1,9}
ou bien encore autorisé l'utilisateur a avoir des chiffres dans son adresse email :
[a-zA-Z0-9]{1,9}
Un peu plus compliqué, je souhaite que l'utilisateur puisse saisir des caractères spéciaux, mais pas n'importe lesquels, seulement le "-", le "." et le "_"
[a-zA-Z0-9^_.-_.]{1,9}
PS : il est important de pré-fixer le "^_." avant d'indiquer les caractères spéciaux.
le {1,9} indique que la saisie doit être entre 1 et 9 caractère, néanmoins, vous pouvez indiquer qu'il faut x caractère, pas plus pas moins exemple :
[a-z]{6}
On attend de l'utilisateur 6 caractères compris entre a et z
Lorsque que dans votre regex vous employez des parenthèses, c'est que vous souhaitez récupérer le contenu :
[a-z]{6}
ne fera que checker si vous avez saisie 6 caractère entre a et z
([a-z]{6})
vous retournera les 6 caractères en question.
Du coup pour la deuxième partie de la regex du début : @
Juste un caractère comme ça, vous pouvez mettre une chaine si vous voulez, ça va simplement controler, que le caractère est bien présent à cette endroit ^^
j'aurais pu controler uniquement les adresses @hotmail.fr
en faisant ça :
([a-z]{1,9})@hotmail.fr
Pour la troisième partie de la regex je vous laisse deviner : ([a-z^_.-]{1,12})
Réponse : On attends que l'utilisateur saisissent une chaine entre 1 et 12 caractère compris entre "a" et "z" mais avec la possibilité d'utiliser les caractère "-","_" et "."
Enfin la dernière partie, c'est un "ou" : (.fr|.com)
J'attends de l'utilisateur, que sont adresse e-mail se termine par un .fr ou un .com
Après, je peux ajouter autant que je le souhaite de possibilité, par exemple :
(.fr|.com|.org|.net)
Bref ici j'ai exploité l'exemple classique des adresses emails, mais avec les regex, on peut controler vraiment un paquet de choses, les adresses, les numéros de téléphone, de carte bleu, parser des codes sources, ...
Attention vos regex doivent toujours commencer par un "/" et terminer par "/" et un caractère
genre :
/[a-z]{1,9}@([a-z^_.-]{1,12}).(.fr|.com)/i
Pour ne récupérer que la première instance.
ou
/[a-z]{1,9}@([a-z^_.-]{1,12}).(.fr|.com)/g
Pour récupérer toutes les instances, si il y en à plusieurs
Vous pouvez également vous amuser à tester vos regex sur ce site là :
https://regex101.com/