Outil pour les regex

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 janv. 2013, 18:33

Bonjour à tous,

Je viens de découvrir un outil très sympa pour visualiser une regex :
http://www.regexper.com

A tester par exemple avec une regex pour vérifier une adresse mail, le résultat gagne tout de suite en clareté :

Code : Tout sélectionner

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

Et sinon toujours pour les Regex, n'oublions pas le testeur de regex de Ripat :
http://www.lumadis.be/regex/test_regex.php?lang=fr

Et son excellent tutoriel sur le sujet : http://www.lumadis.be/regex/tuto_pcre.php
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 928 Messages

08 janv. 2013, 20:06

Sympa !

ViPHP
AB
ViPHP | 5818 Messages

09 janv. 2013, 06:08

Oui pas mal. Et puis j'avais oublié l'excellent tuto de Ripat.
Merci pour le rappel :)

Eléphant du PHP | 120 Messages

10 janv. 2013, 21:00

Cette expression régulière de validation d'une adresse est fausse et ne correspond pas à la norme.

Code : Tout sélectionner

/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD
C'est d'ailleurs celle utilisée dans la fonction de filtrage de PHP :)

ViPHP
xTG
ViPHP | 7331 Messages

11 janv. 2013, 09:46

Il manque des parenthèses dans ton truc (j'irai pas voir o`u par contre xD). Tu es sûre de l'avoir recopiée correctement ?
Car si c'est celle utilisée par PHP je ne comprends pas trop pourquoi preg_match n'est pas capable de l'analyser. :?

Eléphant du PHP | 120 Messages

11 janv. 2013, 12:51

Chez moi, ça marche.
Je suis sûre que c'est correct parce que ça sort directement du Code C de PHP.

ViPHP
xTG
ViPHP | 7331 Messages

11 janv. 2013, 14:23

Bizarre alors. :?
preg_match_all() [function.preg-match-all]: Erreur de compilation: parenthèse non pairée en 837
Il doit y avoir des différences entre l'implémentation des expressions régulières en C et en PHP.

Eléphant du PHP | 120 Messages

11 janv. 2013, 14:42

Ça fonctionne dans du code PHP chez moi sur toutes mes versions de PHP. D'ailleurs normallement PCRE ne retourne pas de message d'erreur en français, c'est que tu dois avoir une très, très vieille version de PCRE.

L'implémentation est identique.

Enfin, de toute façon, l'utilisation d'une expression régulière pour vérifier les adresses mail est inutile avec les filtres.

ViPHP
xTG
ViPHP | 7331 Messages

11 janv. 2013, 15:11

Ce message provient du testeur d'expression régulière de Ripat.
Il doit faire tourner son site sur une très vieille version de PHP dans ce cas. #-o

M'enfin par contre je ne suis pas d'accord que les filtres remplacent tout.
Car la norme autorise les adresses locales, et donc ton client peut rentrer sans souci comme addresse email :
@localhost
Et le filtre accpte. :)

Eléphant du PHP | 120 Messages

11 janv. 2013, 15:14

Ben oui, il s'agit d'une adresse mail valide. Tout comme cela accepte aussi des adresses envoyées à des IP comme hôte et non pas comme 99% des regexp qu'on trouve qui n'acceptent pas ça.

ViPHP
xTG
ViPHP | 7331 Messages

11 janv. 2013, 15:26

On est d'accord sur ce point, c'est une adresse email valide, mais non voulue. :)

Eléphant du PHP | 120 Messages

11 janv. 2013, 15:29

Désolée, mais je ne suis pas d'accord avec le fait qu'une adresse valide soit non voulue. Que l'e-mail n'arrivera pas n'est pas un problème parce qu'il y a suffisamment d'adresses e-mail populairement valides qui n'existent pas.

ViPHP
xTG
ViPHP | 7331 Messages

11 janv. 2013, 16:15

Alors là je dois dire que j'ai éclaté de rire et que je ne sais pas quoi répondre tellement c'est criant de vérité. :langue: