[Php] Regex
Fermé
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
-
23 avril 2011 à 16:59
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 25 avril 2011 à 17:18
heyquem Messages postés 759 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 29 décembre 2013 - 25 avril 2011 à 17:18
Bonjour,
C'est encore moi é_è Décidément les regex c'est pas mon truc.
J'ai un formulaire avec un textarea.
J'aimerais avoir une regex qui permettrait de controller que dans la textarea, il y ai un lien comme ceci :
http://.../index.php?color=[ici n'importequel caractere(s)];" onMouseOver="document.write('document.cookie');"
(ne me demandez pas pourquoi, c'est des trucs personnels que je fais en local :p)
Merci d'avance, Luxerails
C'est encore moi é_è Décidément les regex c'est pas mon truc.
J'ai un formulaire avec un textarea.
J'aimerais avoir une regex qui permettrait de controller que dans la textarea, il y ai un lien comme ceci :
http://.../index.php?color=[ici n'importequel caractere(s)];" onMouseOver="document.write('document.cookie');"
(ne me demandez pas pourquoi, c'est des trucs personnels que je fais en local :p)
Merci d'avance, Luxerails
A voir également:
- [Php] Regex
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Php alert - Forum PHP
- Php?id=1 - Forum PHP
- Retour à la ligne php ✓ - Forum PHP
8 réponses
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
23 avril 2011 à 18:07
23 avril 2011 à 18:07
up
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
23 avril 2011 à 20:59
23 avril 2011 à 20:59
up!
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
23 avril 2011 à 21:29
23 avril 2011 à 21:29
Bonsoir,
La ligne
onMouseOver="document.write('document.cookie');"
fait partie de ce qui doit être vérifié être présent ?
Si oui, est-ce que cela veut dire qu'il y a un caractère '\n' ou '\r\n' entre les deux lignes ?
Quelles sont les moceaux variables dans le texte à analyser ? Est-ce que "document.write" et "'document.cookie'" doivent toujours être là ou ces parties peuvent elles être égales à autre chose ?
La ligne
onMouseOver="document.write('document.cookie');"
fait partie de ce qui doit être vérifié être présent ?
Si oui, est-ce que cela veut dire qu'il y a un caractère '\n' ou '\r\n' entre les deux lignes ?
Quelles sont les moceaux variables dans le texte à analyser ? Est-ce que "document.write" et "'document.cookie'" doivent toujours être là ou ces parties peuvent elles être égales à autre chose ?
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
Modifié par Luxerails le 23/04/2011 à 23:06
Modifié par Luxerails le 23/04/2011 à 23:06
Oui, la ligne onMouseOver="document.write('document.cookie');" fais partie de ce qui doit etre vérifié.
Non, il n'y pas de \n ou quoi que ce soit, en fait le lien tiens sur une ligne, comme il était trop long il y a eu un saut de ligne à un espace quand j'ai posté.
(exemple) : le lien est :
http:/.../index.php?color=red;" OnMouseOver="document.write('document.cookie');"
C'est bon
http:/.../index.php?color=red;" onMouseOver="alert('document.cookie');"
C'est pas bon..
Non, il n'y pas de \n ou quoi que ce soit, en fait le lien tiens sur une ligne, comme il était trop long il y a eu un saut de ligne à un espace quand j'ai posté.
(exemple) : le lien est :
http:/.../index.php?color=red;" OnMouseOver="document.write('document.cookie');"
C'est bon
http:/.../index.php?color=red;" onMouseOver="alert('document.cookie');"
C'est pas bon..
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
23 avril 2011 à 23:56
23 avril 2011 à 23:56
up
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 avril 2011 à 02:07
24 avril 2011 à 02:07
Le pattern que tu cherches est
'\A.*?'
'http://.*?/index\.php\?color=\[.*?\];"'
' onMouseOver="document\.write(\'document\.cookie\');'
J'ai mis sur trois lignes mais ça se tient tout d'un bloc
En PHP, il faut que tu ajoutes les séparateurs devant et derrière, je ne sais plus comment on les appelle exactement
'\A.*?'
'http://.*?/index\.php\?color=\[.*?\];"'
' onMouseOver="document\.write(\'document\.cookie\');'
J'ai mis sur trois lignes mais ça se tient tout d'un bloc
En PHP, il faut que tu ajoutes les séparateurs devant et derrière, je ne sais plus comment on les appelle exactement
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
24 avril 2011 à 12:31
24 avril 2011 à 12:31
Parse error :s
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 24/04/2011 à 18:53
Modifié par heyquem le 24/04/2011 à 18:53
Pardon, j'ai écrit ça avec la facilité que donne Python: des chaînes peuvent être mises sur plusieurs lignes à l'intérieur de parenthèses, elles seront automatiquement concaténées.
Ca permet d'écrire des chaînes longues de façon plus agréable à lire.
Ici j'ai même oublié les parenthèses.
Donc il faut comprendre
'\A.*?
http://.*?/index\.php\?color=\[.*?\];"
onMouseOver="document\.write(\'document\.cookie\');'
et mettre bout à bout les 3 lignes.
Et il y a bien un blanc entre color=\[.*?\];" et onMouseOver
Et pour que ce soit encore plus clair, voir ici:
http://pastie.org/1828687
J'espère ne pas m'être trompé cette fois
Ca permet d'écrire des chaînes longues de façon plus agréable à lire.
Ici j'ai même oublié les parenthèses.
Donc il faut comprendre
'\A.*?
http://.*?/index\.php\?color=\[.*?\];"
onMouseOver="document\.write(\'document\.cookie\');'
et mettre bout à bout les 3 lignes.
Et il y a bien un blanc entre color=\[.*?\];" et onMouseOver
Et pour que ce soit encore plus clair, voir ici:
http://pastie.org/1828687
J'espère ne pas m'être trompé cette fois
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
24 avril 2011 à 19:08
24 avril 2011 à 19:08
Pas d'erreur cette fois ci, juste que... ça marche pas é_è
Laisse tomber, merci quand même.
Laisse tomber, merci quand même.
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 avril 2011 à 20:14
24 avril 2011 à 20:14
Non non y a pas de raison qu'on n'y arrive pas.
Donne moi le texte de la textarea , il y a peut être un détail à voir
Donne moi le texte de la textarea , il y a peut être un détail à voir
sheik54
Messages postés
76
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
29 avril 2011
11
24 avril 2011 à 19:06
24 avril 2011 à 19:06
Sinon il y a ce modèle :
^http\:\/.*\/index\.php\?color\=red\;\" OnMouseOver\=\"document\.write\(\'document\.cookie\'\)\;\"$
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
24 avril 2011 à 21:01
24 avril 2011 à 21:01
Fonctionne pas non plus...
Nan mais laissez tombez c'est pas grave :p
Nan mais laissez tombez c'est pas grave :p
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
24 avril 2011 à 22:55
24 avril 2011 à 22:55
Le caractère ^ indique que http:// doit se trouver tout au début de la chaîne. Il faut l'enlever
Inutile de mettre un backslash devant :
Inutile de mettre un backslash devant /
Il faut deux // après hhtp:
Il faut .*?/index et non pas .*/index
Inutile de mettre un backslash devant =
Inutile de mettre un backslash devant ;
Inutile de mettre un backslash devant "
Le caractère $ dans la RE indique que ('document\.cookie');" doit toucher à la fin de la chaîne, ce qui n'est pas vrai, il faut donc l'enlever
Inutile de mettre un backslash devant :
Inutile de mettre un backslash devant /
Il faut deux // après hhtp:
Il faut .*?/index et non pas .*/index
Inutile de mettre un backslash devant =
Inutile de mettre un backslash devant ;
Inutile de mettre un backslash devant "
Le caractère $ dans la RE indique que ('document\.cookie');" doit toucher à la fin de la chaîne, ce qui n'est pas vrai, il faut donc l'enlever
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 25/04/2011 à 01:34
Modifié par heyquem le 25/04/2011 à 01:34
Je suis trois fois bête:
- j'ai oublié de mettre des backslashes devant les deux parenthèses de
(\'document\.cookie\')
ce qui en fait des délimiteurs de groupe au lieu d'être des caractères.
La RE de sheik54 est d'ailleurs juste sur ce point là; mais il y a d'autres problèmes dans sa RE
- j'ai écrit '\A.*?' alors que c'est inutile si la regex doit seulement vérifier la présence d'une addresse web et non pas chercher aussi un autre motif particulier
- s'il y a '\A.*?' qui indique que le matching doit commencer au début de la chaîne et se poursuivre grâce à '.*?' jusqu'au premier motif suivant correct, il faut spécifier que le point peut matcher aussi les newlines, ce qui , en PHP, se fait avec l'option s . C'est pourquoi le message d'erreur était "Parse error :s" , je pense.
La bonne RE se trouve donc à l'adresse
http://pastie.org/1829319
J'ai écrit cette RE en estimant que les crochets autour de
ici n'importequel caractere(s)
faisaient partie des 'n'importequel caracteres'
http://.../index.php?color=[ici n'importequel caractere(s)];" onMouseOver="document.write('document.cookie');"
Si tu veux associer cette RE à une partie complémentaire pour chercher un motif dans le texte analysé, il faut ajouter '\A.*?' en tête et spécifier l'option s
- j'ai oublié de mettre des backslashes devant les deux parenthèses de
(\'document\.cookie\')
ce qui en fait des délimiteurs de groupe au lieu d'être des caractères.
La RE de sheik54 est d'ailleurs juste sur ce point là; mais il y a d'autres problèmes dans sa RE
- j'ai écrit '\A.*?' alors que c'est inutile si la regex doit seulement vérifier la présence d'une addresse web et non pas chercher aussi un autre motif particulier
- s'il y a '\A.*?' qui indique que le matching doit commencer au début de la chaîne et se poursuivre grâce à '.*?' jusqu'au premier motif suivant correct, il faut spécifier que le point peut matcher aussi les newlines, ce qui , en PHP, se fait avec l'option s . C'est pourquoi le message d'erreur était "Parse error :s" , je pense.
La bonne RE se trouve donc à l'adresse
http://pastie.org/1829319
J'ai écrit cette RE en estimant que les crochets autour de
ici n'importequel caractere(s)
faisaient partie des 'n'importequel caracteres'
http://.../index.php?color=[ici n'importequel caractere(s)];" onMouseOver="document.write('document.cookie');"
Si tu veux associer cette RE à une partie complémentaire pour chercher un motif dans le texte analysé, il faut ajouter '\A.*?' en tête et spécifier l'option s
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
25 avril 2011 à 00:47
25 avril 2011 à 00:47
Parse error encore :s
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
Modifié par heyquem le 25/04/2011 à 01:49
Modifié par heyquem le 25/04/2011 à 01:49
Je n'avais pas vu tes explications plus bas.
¨Pourrais tu écrire ici le code que tu utilises ?
Et pourrais tu fournir le textarea dans lequel tu veux chercher ?
Et que veut dire 'Parse error' en PHP ?
Il n'y a pas d message d'erreur indiquant quelle est la ligne dans laquelle se trouve une erreur ?
L'erreur est elle bien due à la RE ?
Fais la chose suivante:
tu écris le minimum de la RE, puis tu ajoutes progressivement des caractères pour voir à partir d'où ça se coince.
Par exemple
d'abord http
puis [http://]
http://.*?/
http://.*?/index
http://.*?/index\.
etc
¨Pourrais tu écrire ici le code que tu utilises ?
Et pourrais tu fournir le textarea dans lequel tu veux chercher ?
Et que veut dire 'Parse error' en PHP ?
Il n'y a pas d message d'erreur indiquant quelle est la ligne dans laquelle se trouve une erreur ?
L'erreur est elle bien due à la RE ?
Fais la chose suivante:
tu écris le minimum de la RE, puis tu ajoutes progressivement des caractères pour voir à partir d'où ça se coince.
Par exemple
d'abord http
puis [http://]
http://.*?/
http://.*?/index
http://.*?/index\.
etc
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
25 avril 2011 à 00:52
25 avril 2011 à 00:52
Hum, je vais mieux vous expliquer le truc :
j'ai un fichier index.php (qui contient normalement un parametre get 'color').
J'ai un fichier contact.php et envoi_mail.php.
dans le fichier index.php il y a une phrase de la couleur de $_GET['color']:
<span style="color: <?php echo $_GET['color'] ?>">Texte</span>
le but étant d'écrire dans l'url
.php?color=xxx;" onmouseOver="code javascript"...
etc, le but étant de récupérer des cookies.
Dans le fichier contact.php, un formulaire avec un textarea qui simule un envoi de mail (en fait ça envoie aucun mail).
Dans envoi_mail, le script php vérifie avec une regex si il y a le lien comme ceci :
http://.../index.php?color=xxx;" onMouseOver="document.write('document.cookie');"
j'ai un fichier index.php (qui contient normalement un parametre get 'color').
J'ai un fichier contact.php et envoi_mail.php.
dans le fichier index.php il y a une phrase de la couleur de $_GET['color']:
<span style="color: <?php echo $_GET['color'] ?>">Texte</span>
le but étant d'écrire dans l'url
.php?color=xxx;" onmouseOver="code javascript"...
etc, le but étant de récupérer des cookies.
Dans le fichier contact.php, un formulaire avec un textarea qui simule un envoi de mail (en fait ça envoie aucun mail).
Dans envoi_mail, le script php vérifie avec une regex si il y a le lien comme ceci :
http://.../index.php?color=xxx;" onMouseOver="document.write('document.cookie');"
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
25 avril 2011 à 01:52
25 avril 2011 à 01:52
Je n'y comprends rien.
C'est simple, il faut qu'on ait le texte dans lequel doit se trouver une adresse web. Avec ça on se débrouillera. Peu importe ce que tu fais par ailleurs comme manips
C'est simple, il faut qu'on ait le texte dans lequel doit se trouver une adresse web. Avec ça on se débrouillera. Peu importe ce que tu fais par ailleurs comme manips
Luxerails
Messages postés
159
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
24 décembre 2012
41
25 avril 2011 à 12:37
25 avril 2011 à 12:37
C'est le visiteur qui rentre le texte dans la textarea.
La regex doit vérifier si le visiteur a rentrer un lien comme celui la dans la textarea.
La regex doit vérifier si le visiteur a rentrer un lien comme celui la dans la textarea.
heyquem
Messages postés
759
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
29 décembre 2013
131
25 avril 2011 à 17:18
25 avril 2011 à 17:18
He bien, poste un tel texte.
Et poste le code PHP que tu utilises et qui donne l'erreur.
Est-ce que tu comprends ?
Et poste le code PHP que tu utilises et qui donne l'erreur.
Est-ce que tu comprends ?