5139 sujets

Le Bar du forum

Pages :
(reprise du message précédent)

Cygnus a écrit :
C'est ce qu'on appelle une erreur de jeunesse ... Smiley ravi
Rien ne t'empêche d'en mettre une plus récente Smiley biggol
a écrit :
Et puis qu'est-ce que cette manie que d'aller fouiner dans les vieilles casseroles, hein ?!? Smiley rolleyes
ça détend Smiley smile





Si ça intéresse quelqu'un, le problème avec les requêtes SQL chez OVH, c'est le caractère ` dans "SELECT * FROM `maTable` ..." Smiley crash
-->[]
Julien Royer a écrit :
Ceci dit, c'est assez récent, d'après mes souvenirs. Smiley smile

C'est exact ...
J'écoute la vindicte populaire ! Smiley lol


Thomas D. a écrit :
Rien ne t'empêche d'en mettre une plus récente Smiley biggol

... On va p'tête limiter les dégats, hein ...


Thomas D. a écrit :
Et puis qu'est-ce que cette manie que d'aller fouiner dans les vieilles casseroles, hein ?!? Smiley rolleyes
ça détend Smiley smile
Tu es stressé ?
Tu as besoin de te détendre ?
D'oublier tes soucis ?
Allonge-toi sur le canapé et raconte-moi tout ... Smiley lol
Cygnus a écrit :
Tu es stressé ?
Tu as besoin de te détendre ?
D'oublier tes soucis ?
Allonge-toi sur le canapé et raconte-moi tout ... Smiley lol
Période d'examens oblige Smiley smile

Mais pour le stress, la raison était en fin de message : ovh Smiley sweatdrop
Arf, j'ouvre le quiz PHP difficile et je tombe sur quoi : regex en première question.
C'était couru d'avance, s'il y avait une quelconque regex dans les Quiz PHP, c'est certain que je vérifierais.

a écrit :
Comment vérifier la syntaxe d'une adresse e-mail contenue dans la variable $email ?

* preg_match($email,"*@*.*")
* ereg($email,"[:alpha:]*@[:alpha:]*\.[:alpha:]*")
* eregi('^[_a-z0-9-]+(\.[_a-z0-9-]*)*@[a-z0-9-]+(\.[a-z0-9-]+)+$', $email)

Réponse : malheureusement, aucune ! Smiley decu

Si on ne considère que le plan syntaxique du motif, la solu eregi est "correcte".
Par contre, pour l'usage qu'on lui prête dans la question, elle est totalement fausse, car elle laissera passer des emails syntaxiquement incorrectes et/ou totalement farfelues.
Inutile d'appeler le moteur d'expressions, un simple strpos() sera tout aussi efficace et sera 100 fois moins lourd pour le serveur. Smiley cligne

Si une solu regex envisagée, alors elle passera par une regex de ce type :
preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])+_?@[[:alnum:]]([-.]?[[:alnum:]])+\.[a-z]{2,6}$`',$chaine))

Donc si le quiz doit apporter une réponse efficace, il y a lieu de corriger.
Voici une proposition :
a écrit :
Comment vérifier la syntaxe d'une adresse e-mail contenue dans la variable $email ?

* str_replace('`@`','_at_',$email)
* ereg($email,"[:alpha:]*@[:alpha:]*\.[:alpha:]*")
* preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])+_?@[[:alnum:]]([-.]?[[:alnum:]])+\.[a-z]{2,6}$`',$email))
Smiley cligne
Il faudrait y ajouter une réponse supplémentaire pour faire le vrai vicieux :
preg_match($email, "#^[-a-z_0-9\\.]{2,}@[-a-z_0-9]{2,}\\.[a-z]{2,4}$#i");
A refuser bien entendu parce que l'ordre des paramètres est incorrect et uniquement pour cette raison. IL est méchant le QuentinC hein ?
QuentinC a écrit :
uniquement pour cette raison.
Non, à refuser dans tous les cas...
Elle est tout aussi fausse que la précédente, même en corrigeant l'ordre des paramètres. Smiley smile

a écrit :
IL est méchant le QuentinC hein ?
Non, il ne comprend pas ce qu'il fait ! Smiley ohwell
Modifié par Bison (24 Jan 2007 - 19:04)
Administrateur
Le problème, lorsqu'on est un puit de science sans fond, c'est qu'il faut parfois se mettre un minimum au niveau des misérables vers de terre que sont les gens normaux. Parfois même leur expliquer clairement pourquoi ils commettent des erreurs si misérables.
Sinon c'est tout ces gens normaux qui vont trouver que tu es vraiment indésirable.
Surtout lorsque ce sont tous ces gens qui font vivre une communauté (de vers de terre) dans la joie et la bonne humeur (et la misère intellectuelle sans aucun doute).

Bref, une fois de plus : merci de bien vouloir exprimer un minimum de tact.
Modifié par Raphael (24 Jan 2007 - 19:15)
QuentinC a écrit :
preg_match($email, "#^[-a-z_0-9\\.]{2,}@[-a-z_0-9]{2,}\\.[a-z]{2,4}$#i");

Et moi qui comptait me remettre au PHP sous peu, tu viens de détruire toute ma motivation, Quentin Smiley bawling
Modifié par Sylvain (24 Jan 2007 - 20:49)
Raphael a écrit :
Le problème, lorsqu'on est un puit de science sans fond, c'est qu'il faut parfois se mettre un minimum au niveau des misérables vers de terre que sont les gens normaux. Parfois même leur expliquer clairement pourquoi ils commettent des erreurs si misérables.
Sinon c'est tout ces gens normaux qui vont trouver que tu es vraiment indésirable.
Surtout lorsque ce sont tous ces gens qui font vivre une communauté (de vers de terre) dans la joie et la bonne humeur (et la misère intellectuelle sans aucun doute).

Bref, une fois de plus : merci de bien vouloir exprimer un minimum de tact.

Ok ok ok ok... !
Loin d'être un puit de science sans fond, je ne vais quand même pas m'excuser de connaître mon sujet et celui-là en particulier.
J'ai donné un exemple concret qu'il suffit de lire, de tester, de décortiquer.
J'ai un site tout entier consacré à ce seul sujet que sont les expressions régulières.
On y trouve des dizaines d'exemples et des pages entières d'explications.
On y trouve des articles complets dont un sur l'analyse syntaxique d'une adresse email.

Que dois-je faire de plus ?

A quel endroit du post ai-je manqué de respect envers quelqu'un ?
Dire à Quentin qu'il ne sait pas ce qu'il fait c'est lui rendre service.
A ce niveau il a deux solus :
- il s'en fout complètement et le sujet se clôture tout seul sans que je n'ai donné, sans doute pour rien, des explications qui ne seront même pas lues.
- il s'intéresse et posera les questions afin d'avoir les réponses qui lui font défaut.

C'est ma façon de faire, celui qui veut quelque chose vient le chercher !
Et contrairement à ce que tu peux penser, il y en a des dizaines qui viennent chercher les infos adéquates.

Enfin bon... désolé Quentin.

EDIT : hé zut... j'ai encore oublier ces fichus smileys.
Tant pis !
Modifié par Bison (24 Jan 2007 - 21:20)
Administrateur
Bison a écrit :
Que dois-je faire de plus ?

Etre aimable tout simplement ?

C'est quand-même étonnant que l'ensemble des retours qu'on me fait depuis quelques mois ne portent que... sur un seul membre.

Tu sais beaucoup de choses dans ton domaine, mais les asséner systématiquement en faisant clairement comprendre aux autres que ce sont des cons, ça commence à agacer les autres justement.

Bison a écrit :
Dire à Quentin qu'il ne sait pas ce qu'il fait c'est lui rendre service.

On est tout à fait d'accord. Mais lui dire "tu comprends rien" et lui dire "ce n'est pas comme ça qu'il faut faire, parce que ci, parce que ça"... est un peu différent.

Bison a écrit :
EDIT : hé zut... j'ai encore oublier ces fichus smileys.

Tiens, c'est un peu comme si on te disait : va chercher le dico si tu ne sais pas écrire. Au bout d'un moment ça agace, surtout quand on fait attention à ce qu'on écrit en général.
Modifié par Raphael (24 Jan 2007 - 22:37)
Merci Raphael pour ces petit Quiz.
7/10 aux niveaux 3 (XHTML/CSS), et 9 en accessibilité.
C'est pas mal non? J'aime bien commencer par le plus dure Smiley cligne
Ya quelques questions assez vicieuses quand même.
Modifié par Hermann (24 Jan 2007 - 22:57)
Hermann a écrit :

Ya quelques questions assez vicieuses quand même.

Ca, je ne te le fais pas dire !
Bon, Bon, Bon ... Smiley rolleyes

Etant en partie responsable du débat qui vous anime (car j'ai co-écrit les questions du quiz PHP difficile), il me semble important de revenir sur certaines remarques qui ont été faites afin de clarifier un certain nombre de choses.

Concernant le quiz, quelques erreurs ont été signalé, et après vérification, c'est avec plaisir (et presque sans traîner les pieds Smiley langue ) que je me suis chargée de la correction de ces fautes impardonnables... Smiley confused

Les commentaires ont tous été pris en compte et ont fait pour la plupart l'objet d'un débat dans le Salon des Modos.
Afin, de vérifier la véracité des informations données, j'ai visité un certain nombre de sites, et lu pas mal de choses ...
Et... il m'est apparu clairement, que comme toujours, il n'y a pas de solution ultime. Smiley confus
Acceptant la critique (presque) sans rechigner (eh oh, faut pas pousser Smiley lol ), j'attends tout de même de celle-ci qu'elle soit fondée et surtout, argumentée.

La question qui soulève tant de problèmes a déjà fait l'objet d'une remarque :
Hubert Roksor a écrit :
Difficile #1 : "Comment vérifier la syntaxe d'une adresse e-mail contenue dans la variable $email ?
Comme pour la précédente, j'ai peur que cela laisse une sorte de doute ou de mauvaise habitude chez certains utilisateurs en leur laissant penser que eregi() est la meilleure façon de vérifier une adresse email. Sachant que ereg() n'est pas très aimé des programmeurs (lent, pas très puissant et absent par défaut de PHP 6.0) et qu'il est pratiquement impossible de faire un bon validateur avec une regexp, ce serait génial de trouver un moyen d'utiliser l'extension Filter dans la réponse, avec le filtre FILTER_VALIDATE_EMAIL. (activée par défaut dans PHP 5.2+)

Ce commentaire-ci m'a un peu laissée perplexe.
En effet, il n'est en aucune manière fait mention d'une quelquonque erreur, mais il apparait simplement d'après son auteur, que la solution proposée n'est pas la meilleure.
Bon, soit ... Je veux bien l'admettre. Smiley ohwell
Cependant, je tiens à rappeler que nous ne sommes pas sur un forum dédié au PHP, et je ne doute absolument pas que la solution proposée ne soit pas forcément la plus adaptée.
Pour autant, est-ce que cela fait que cette réponse est incorrecte ?


Ce commentaire-ci ne m'avance guère plus :
a écrit :
Si on ne considère que le plan syntaxique du motif, la solu eregi est "correcte".
Par contre, pour l'usage qu'on lui prête dans la question, elle est totalement fausse, car elle laissera passer des emails syntaxiquement incorrectes et/ou totalement farfelues.
Inutile d'appeler le moteur d'expressions, un simple strpos() sera tout aussi efficace et sera 100 fois moins lourd pour le serveur. [cligne ]

Pourquoi la solution serait-elle syntaxiquement correcte mais totalement fausse ? Smiley sweatdrop
Dans les cours de PHP que j'ai suivi (et que je vais peut-être actualiser Smiley ravi ), on m'a appris à vérifier une adresse de cette façon. Maintenant, depuis on aura certainement trouvé autre chose ...
Mais en quoi, le bout de code serait-il devenu obsolète ? Smiley eek
D'apèrs ce que j'ai pu lire sur différents sites, il s'agit toujours d'une méthode employée ...

Donc, avant que je ne propose une refonte de la question et/ou de la solution, j'aimerais bien que l'on m'explique :
1/ En quoi cette proposition n'est pas bonne.
2/ Par quoi il faudrait la remplacer, et par pitié, mettez vous d'accord entre le preg_match(), le filter_validate_email ou le strpos().
3/ Soyez clairs ! Merci ... Smiley smile
4/ Toute copie incomplète et/ou baclée sera sanctionnée par un bannissement temporaire à durée encore indéterminée. Smiley lol
En fait ils sont très bien fait ces quiz...

La preuve, je me suis pris un 4/10 au niveau débutant de js/dom.

C'est pas une preuve d'évaluation pertinente ça ? Hein ???

Smiley cligne
Bison a écrit :
Non, à refuser dans tous les cas...
Elle est tout aussi fausse que la précédente, même en corrigeant l'ordre des paramètres. Smiley smile

Pour ce qui est de la remarque ci-dessus, je crains que tu n'aies mal compris la proposition de Quentin. Smiley rolleyes
Il ne proposait pas une solution juste mais une autre option erronée...
Afin de perdre un peu plus le visiteur dans les méandres de la vérification syntaxique ...

Qui a dis (ou pensé, c'est kif kif) que j'étais sadique ?!? Smiley lol
Allez, on lève la mimine ! Smiley lol Smiley lol


Bison a écrit :
Non, il ne comprend pas ce qu'il fait ! Smiley ohwell

Tu comprendras que du coup, la réflexion qui suit tombe un peu comme un gigantesque rocher dans la flaque... Smiley confus
Modifié par Cygnus (24 Jan 2007 - 23:47)
J'ai toujours vérifié mes adresse e-mail comme ça, que ce soit en js, en php ou ailleurs... et c'est la version que j'ai donnée presque partout à mes copains programmeurs, sur d'autres forums, etc...
^[-a-z0-9_\\.]{2,}@[-a-z0-9_]{2,}\\.[a-z]{2,4}$
Je décortique pour être sûr que j'ai bien été compris : Au moins deux lettres, chiffres, tierets, soulignés ou points (le nom d'utilisateur), le @, au moins deux lettres, chiffres, tirets ou soulignés (le nom de domaine), le point, et deux à quatre lettres (l'extension du domaine).
Je ne vois pas comment une adresse e-mail pourrait être syntaxiquement formée autrement.

Bison, j'aimerais s'il te plaît que tu m'expliques en détail ce qui ne va pas dans cette expression régulière. IL n'est jamais trop tard pour corriger ses erreurs. Par contre, je n'aime pas qu'on me dise que c'est faux si on ne m'explique pas pourquoi, surtout si on me traite d'imbécile par la même occasion.
Je ne suis pas vexé, il m'en faut plus que ça, d'autant plus que tu as donné presque spontanément des excuses, que j'accepte sans souci. Mais je t'en prie, explique-moi la faute, ça ne rend service à personne de dire que c'est faux si on ne donne pas également de raison.
A noter que si je connais les expressions régulières en php aujourd'hui, c'est en bonne partie grâce à expreg.com.
Cygnus a écrit :
Pourquoi la solution serait-elle syntaxiquement correcte mais totalement fausse ? Smiley sweatdrop

Syntaxiquement parlant, dans sa grammaire de programmation si tu veux, la regex est tout à fait correcte car elle suit bien le plan des règles qui défini la manière d'écrire le langage des expressions régulières.

Maintenant je dis qu'elle est fausse et je vais t'expliquer pourquoi.
Vérifier syntaxiquement une adresse email c'est s'assurer qu'elle correspond à schéma établi, respectant la forme : user@host

expreg a écrit :
La partie composant l'user d'une adresse email, ne doit contenir que des chiffres/lettres ainsi que les caractères tels que l'underscore (_), le tiret (-) ou le point(.)
La partie user doit commencer uniquement par un caractère alphanumérique
Donc c'est parfaitement clair, une email doit commencer par une lettre/chiffre.
Ta regex : eregi('^[_a-z0-9-]+(\.[_a-z0-9-]*)*@[a-z0-9-]+(\.[a-z0-9-]+)+$', $email)

On décortique :
1) '^[_a-z0-9-]+
- avec ce motif, je peux commencer mon email aussi bien par un _ qu'un -
- je peux même en avoir une série genre, _-_-_-_-_ que la regex va accepter à tous les coups.

2) (\.[_a-z0-9-]*)*
- à partir de ce motif, tout est permis, 200 points si on veut, que des underscores, même de ne rien avoir du tout.
Avec ce genre de motif, tu permet à n'importe qui de donner des emails totalement farfelue du genre :
_---_---_---_.....c.est.con.mais.c.est.bon.comme.email.....@

3) [a-z0-9-]+
- avec ça, on a un caractère à coup sûr après l'underscore, donc c'est bon comme motif !
Hé bin non, parce que le caractère placé directement derrière un arobase ne pourra jamais être chose qu'un alphanumerique.
Mais ce n'est pas tout, même en enlevant le - ce motif ne sera efficace que si et seulement si, le motif suivant oblige d'avoir aussi un caractère alphanumérique.
Hé oui, un host, c'est deux caractères minimum (alphanumérique)

On prend ton motif suivant :
4) (\.[a-z0-9-]+)+
- alors, en suivant ce que je dis plus haut, il faudra accepter avant toute chose un caractère alphanumérique.
Hors ton motif m'autorise à mettre un . suivi de autant de ----- que je veux et le tout répêté autant de foix que je veux :
.------.------.------.-----
Arrivé à ce stade notre adresse finale ressemble à ça :
_---_---_---_.....c.est.con.mais.c.est.bon.comme.email.....@-.-----.----.----.----

Ma question est donc :
Ta regex est-elle efficace dans le parsage de l'adresse email.
La seule contrainte correcte dans le motif de ta regex, c'est l'arobase.
Si tel est le cas, strpos($email,'@') est mille fois plus efficace.


Pour te répondre à propos de strpos(),eregi() ou preg_match().
A quoi ça sert de faire une regex passoire acceptant n'importe quoi ?
Utilises strpos() qui vérifie la présence de @ et puis basta.
Maintenant imagine que tu sois un FAI et que tu souhaite vérifier les débilités qu'un internaute pourrait encoder niveau email.
Ta regex, ne donnera pas l'effet voulu.
Maintenant si tu veux quand même l'utiliser, opte alors pour preg_match() qui est 10 fois plus rapide que eregi().

Voilà, je crois avoir répondu à tes demandes.

========================================================

A Quentin maintenant !
QuentinC a écrit :
Je ne vois pas comment une adresse e-mail pourrait être syntaxiquement formée autrement.

Ta regex :
^[-a-z0-9_\\.]{2,}@[-a-z0-9_]{2,}\\.[a-z]{2,4}$

On décortique :
1) ^[-a-z0-9_\\.]
- Mêmes remarques qu'au point 1 précédent
En prime avec ce motif, on a aussi droit au point, qui n'a absolument aucune raison de se trouver là.
De plus \\. dans la classe ne sert absolument à rien, le métacaractère "dot" perd son statut à l'intérieur d'une classe.
Pourquoi doubler le \ ?

2) [-a-z0-9_]{2,}
- tu obliges bien d'avoir les 2 caractères minimum requis, ce qui pourrait être valide si on ne pouvait pas y mettre seulement _-
Donc en gros même remarques que point 2 précédent avec le fait qu'ici, les sous-domaines ne sont même pas acceptés.

3) \\.[a-z]{2,4}$
- pourquoi doubler le \ ?
- rectifier l'intervalle à {2,6} car car des extensions à 6 caractères existent (museum)

Voilà !

Epilogue :
Maintenant le tout est de savoir ce que l'on cherche à faire, chacun étant libre d'employer la forme qu'il préfère et le code qu'il souhaite aussi faux soit-il, le problème n'est pas là.
Le vraie question, c'est de savoir si on laisse l'internaute appréhender le sujet de manière erronée, parce que dans le lot, il y en a peut-être un qui a vraiment envie d'apprendre !
Ah ! Voilà du post constructif comme on les aime !

bison a écrit :

De plus \\. dans la classe ne sert absolument à rien, le métacaractère "dot" perd son statut à l'intérieur d'une classe.

Ah, c'est toujours bon à savoir, ça. C'est noté.

bison a écrit :

Pourquoi doubler le \ ?

Parce que sinon, j'obtiens une erreur, enfin la regexp n'est pas interprétée correctement. Monsieur php croit que \. est un caractère spécial du genre \n.
A noter que je délimite la chaîne par des guillemets.

Donc si j'ai bien compris le gros point négatif, c'est qu'on ne doit autoriser qu'un caractère alphanumérique en premier.


Je vais tenter de faire mieux, dans le but d'apprendre par essai-erreur, en proposant alors la regexp suivante :
^[a-z0-9]+(?:[a-z]+|(?:[-._][a-z0-9]+)*)@^[a-z0-9]+(?:[a-z]+|(?:[-._][a-z0-9]+)*)\\.[a-z]{2,6}$
Modifié par QuentinC (25 Jan 2007 - 18:57)
Pages :