TESTEUR DE REGEX

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 8 janv. 2010 à 09:26
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014 - 20 janv. 2010 à 23:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51089-testeur-de-regex

inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
20 janv. 2010 à 23:33
[HS]
Pour activer PHP5 chez free, il suffit de mettre comme extension de fichier '.php5'.
/HS
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
15 janv. 2010 à 09:34
J'ai pourtant pris la peine de préciser que je ne disais pas ça pour toi ^^
Je ne faisais qu'un commentaire théorique, sur la discussion de fond au sujet des sources compatibles PHP4. Je n'allais pas plus loin. Je n'ai pas parlé de regex inutiilisé sous PHP5 ou autre...
Bref.

Chez Free, hyper compliqué, il faut un .htaccess à la racine du site avec comme contenu :
php 1

Je sais pas si c'est vraiment "hacker", d'autant que c'est dans la doc/faq de Free quelque part.

Sinon, la doc pour les filtres est peut-être light, autant que certaines classes de la SPL, mais l'utilisation des filtres est quand même quelque chose de relativement simple.

Et pas de soucis, je suis cool, hein ;)
cs_hornetbzz Messages postés 59 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 3 janvier 2011
15 janv. 2010 à 08:39
Ah bon, tu n'utilises plus les regex en PHP5/6 ? les fonctions preg_match ou preg_match_all n'existent plus elles non plus ? Donc tant que les regex vivront, ce mini-code sera compatible : rien n'empêche de l'utiliser en php5 ou php6. D'autant plus que la doc concernant Filter est plutôt light. Et pour Free, je crois de mémoire qu'il faut hacker pour forcer PHP5. Bon allez, keep cool, promis, je mettrais une belle classe POO en PHP5 la prochaine fois ;-)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
14 janv. 2010 à 20:30
[HS]
Y'a quand même un moment, faudra arrêter de proposer des sources PHP4, hein. Je dis pas ça pour toi, mais simplement, s'arrêter à considérer que tout le monde n'a pas PHP5...
Je rappelle quand même que PHP en est à sa version 5.3 depuis plus de 6 mois, et que PHP4 n'est plus développé depuis 2 ans ni supporté depuis 1an 1/2.
Même Free permet d'utiliser PHP5. Même Ubuntu est à PHP5.2.
Un jour, faudra arrêter de regarder en arrière et tourner la tête franchement en avant : c'est justement parce que trop de gens hésitent à passer à PHP5 que les hébergeur de tous poils ne font pas tous l'effort d'installer PHP5.
Et après, on se retrouve avec des codes obsolètes et monstrueux juste parce qu'on veut que ce soit compatible PHP4... Et pourquoi pas compatible PHP3 tant qu'on y est ?

Voilà, c'était histoire de râler un peu, histoire d'être fidèle à mon image (et puis je suis de mauvais poil à cause de mon pc, désolé de vous le faire subir).
/HS
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
14 janv. 2010 à 18:39
Pas faux ;) Je ne contredit pas non plus l'intérêt de cette classe ^^
cs_hornetbzz Messages postés 59 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 3 janvier 2011
14 janv. 2010 à 17:12
Merci pour vos commentaires auxquels je réponds ou j'ajoute :

Les dates :
la regex avec des assertions conditionnelles étant un tantinet sport - voire impossible - à écrire, ne pas oublier la fonction native de php : checkdate() en complément de la regex.

Les filtres:
Oui, c'est vrai, les filtres sont très bien. Effectivement, l'extension filter est activée par défaut depuis PHP 5.2.0 mais avant cette version, pas d'extension filter qui tienne la mer. (sauf PECL). D'où ces regex : nombreux sont ceux qui n'ont pas PHP5 et encore moins PHP6.
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
11 janv. 2010 à 08:35
Salut,
T'as classe peut être utile (en dehors du fait que tes regex soient valident ou non)
Mais il existe à partir de PHP5 des filtres qui sont très utile et fonctionnent très bien. Renseigne toi dessus ;-)
cs_hornetbzz Messages postés 59 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 3 janvier 2011
8 janv. 2010 à 12:31
Merci pour ces précisions et les commentaires.

Les regex incluses sont là uniquement à titre d'exemple. Il est clair que ce ne sont en aucun cas des références :-) Désolé si j'ai laissé croire un truc pareil.

Pour les emails:
à nouveau, la regex jointe n'est qu'un exemple. N'oublions pas, c'est la section "débutant" et l'objectif avoué est de donner des exemples, car la complexité des regex est telle que c'est presque un vrai métier ;-) . Si je balance la mega regex http://www.iamcal.com/publish/articles/php/parsing_email, ça risque d'en perdre plus d'un(e). Mais merci, elle est super bien, ainsi que le reste de ce site d'ailleurs.

Pour les accents:
je ne savais pas que le tylde sur les voyelles existait en langue française, mais oui pour le reste, je suis complètement d'accord.

Regex des pwd:
100% d'accord avec toi sur l'utilisation des car spéciaux @$£ etc.. , je fais exactement la même chose. Même si la regex incluse ne correspond pas à cela. Par contre, la limitation du nombre de caractères, même si elle est redondante avec la dB, me parait nécessaire mais effectivement pas indispensable du fait des sha-1 (md5..). Et à vrai dire, le motif en exemple est utilisé pour des requêtes cURL envoyées sur des produits qui ne supportent pas les caractères spéciaux d'où cette version light.

Pour les dates:
D'accord avec ta remarque. Mais comme tu le soulignes, la regex complète n'est pas si simple à écrire. A vrai dire, j'ai passé qq heures à essayer d'en écrire "une vraie" sans succès dans le délai qui m'était imparti, d'où cette version light. Donc j'effectue des contrôles postérieurs et complémentaires à la regex (histoire de ne pas voir Charlemagne squatter ma dB). Mais si tu en as écrite ou trouver une aussi belle que celle des emails, welcome ;-)

Pour les $_SESSION:
Ce code n'est qu'un extrait d'autres codes dans lesquels j'utilise les sessions. Effectivement, en standalone, les $_SESSION n'ont pas d'utilité particulière et peuvent très bien être remplacées par un array classique.

Pour la classe dédiée:
Bien sûr que l'on voit bien que ces regex ne sont que des exemples. La preuve, un test basique montre que la plupart de ces regex en exemple répondent "true" pour un même champ en entrée. Donc avec un grand "OUI", ça serait super de bâtir une classe pour être complet. Il faut juste la trouver ou la créer... Toute proposition sérieuse sera la bienvenue :-)
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
8 janv. 2010 à 09:26
Salut,

C'est marrant ce passage : "Sauf que pour un champ donné, disons l'adresse email par exemple, on trouve 3 milliards de regex sur le net, et bien sûr, pas deux identiques. Sans compter que ce sont souvent les débutants qui postent leur belle regex"

Disons que ta regex pour l'adresse email est loin de valider une adresse conforme à la RFC 5322 ( http://en.wikipedia.org/wiki/E-mail_address#RFC_specification ). Je viens de trouver un article qui m'a l'air intéressant sur la question : http://www.iamcal.com/publish/articles/php/parsing_email/ et je ne pense pas que l'auteur soit débutant ;)
Bon, comme tu proposes tout un tas de regex, je suppose qu'on peut discuter de la validité de certaines ;)
Par exemple, pourquoi interdire les accents sur les lettres capitales ? L'Académie Française préconise l'utilisation de capitales accentuées, étant donné que les capitales non accentuées ne sont dûes qu'à une habitude en typographie qui n'est pas justifiée par autre chose que le nombre de caractères à utiliser. Pour les accents, tu en oublies quelques uns également, par exemple ñ ou õ (pour ne citer qu'eux)

Celle du mot de passe me pose un sérieux soucis de sécurité : le nombre de caractères est arbitrairement limité, sans réelle raison. Quand un caractère est hashé (md5, sha1 ou autre), il en résulte une chaîne de caractères hexadécimaux ne posant aucun problème de sécurité lors d'une requête sur la base de données. Personnellement, j'utilise habituellement un mot de passe contenant des caractères spéciaux tels que @ $ ! # & voire même £ € µ et j'en passe. Il serait dommage de les interdire, sachant que leur utilisation ne cause aucun problème en matière de sécurité.

Ta regex pour les dates de naissances a un problème : le motif que tu utilises ( #^[0-3]?[0-9]/\-[01][0-9]/\-[0-9]{4}$# ) permet une date comme 39/18/9999
Pour l'année, admettons (même si on n'y est pas encore, mais dans ce cas, il n'y a pas de raison de forcer/limiter le nombre de caractères à 4, puisqu'on ne peut pas valider la date de naissance de Charlemagne). Pour le jour et le mois, c'est gênant ^^. Je pense qu'il faut, pour un motif valide, utiliser des assertions pour s'assurer que, pour le jour, le chiffre 3 n'est suivi que de 0 ou 1, et que pour le mois, le chiffre 1 n'est suivi que de 0, 1 ou 2. Et encore, ce ne serait pas suffisant, puisqu'il n'y a que 30 jours en avril, 28 ou 29 en février...

Enfin, je ne comprends pas pourquoi tu mets les regex en variable de session... Je n'en vois pas l'intérêt...

Sinon, ma référence en matière de test de regex, c'est lumadis.be : http://www.lumadis.be/regex/test_regex.php?lang=fr

Pour terminer, l'idée est bonne, très intéressante et peut s'avérer très utile pour du développement ou de la validation de données. Ca reste quand même un outil léger, parce que pour faire de la validation de données, le mieux est d'utiliser une classe plus sophistiquée permettant de faire des tests plus poussés (par exemple pour les dates !).
Rejoignez-nous