Regex : le top des expressions régulières pour développeur

Les REGEX ou « Regular Expressions » sont la plupart du temps évitées par les développeurs junior dans tous les langages de développement confondus. Après tout, êtes-vous capable de dire que cette combinaison de caractères sert à déterminer si la chaîne testées est bien un numéro de téléphone ?

^+33s?[1-9]d{8}$
// +33 388987638

Pourquoi devriez-vous apprendre tout ça ? Tout simplement parce que une fois que vous le connaissez en JavaScript, vous le connaitrez dans tous les autres langages. En effet, les expressions régulières sont communes à tous les langages de développement actuels. De plus, vos applications gagneront en puissance, les possibilités des expressions régulières sont infinies. Elles sont utilisées par tous les gros sites du moment, notamment pour tester les formulaires (attention : il ne faut jamais se contenter de tester les formulaires en JavaScript. Il faut toujours les (re)tester du coté serveur afin d’éviter tout piratage).

regex

Pour utiliser ces expression régulières, il vous faudra utiliser en JavaScript les fonctions match et replace et en PHP les fonctions preg_match et preg_replace soit par exemple :

// PHP
function checkMail($email)
{
    return preg_match("/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/", $email);
}

// Javascript
function checkMail(email) {
    return email . match(/^[_a - z0 - 9 -] + (.[_a - z0 - 9 -] +)*@[a - z0 - 9 -] + (.[a - z0 - 9 -] +)*(.[a - z]{
        2,3})$/);
}

Voici quelques unes des expressions régulières que je me garde toujours sous le coude en cas de besoin :

// tester un email
^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$

// tester une url
^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$

// tester une adresse ip
^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

// récupérer le contenu entre deux balises strong (à adapter, en php utilisez preg_match_all )
^(.*)$

// tester un code postale
^((0[1-9])|([1-8][0-9])|(9[0-8])|(2A)|(2B))[0-9]{3}$

// tester sur le texte fait bien entre 4 et 128 caractères
^(.){4,128}$

// tester un numéro de téléphone américain (333-333-3333)
^[0-9]{3,3}[-]{1,1}[0-9]{3,3}[-]{1,1}[0-9]{4,4}$

// tester un numéro de téléphone anglais (01614840484)
^[0-9]{11,11}$

// tester un code postale anglais (55416)
^[0-9]{5,5}$

// tester un code postale américain (AL42PT)
^[A-Z]{1,2}([0-9]{1,2}|[0-9]{1,1}[A-Z]{1,1})( |)[0-9]{1,1}[A-Z]{2,2}$

// tester une adresse IP V6
^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*$

Voici un outil intéressant pour tester vos regex : http://regexpal.com/

Il faut mettre dans la partie du haut votre expression régulière et dans la partie du bas, les chaines de caractères à tester. Si la chaine est surlignée de jaune, le test est positif :

regexpal

HTML5 et CSS3 : tuto Adobe Edge et astuces SEO
Le top des redirections htaccess

1 Comments on “Regex : le top des expressions régulières pour développeur”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *