[Php] Regex
Luxerails
Messages postés
159
Date d'inscription
Statut
Membre
Dernière intervention
-
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
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
- Retour à la ligne php ✓ - Forum PHP
- Retour a la ligne avec Echo comment faire ? - Forum Webmastering
- Alert php - Forum PHP
8 réponses
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 ?
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..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
Sinon il y a ce modèle :
^http\:\/.*\/index\.php\?color\=red\;\" OnMouseOver\=\"document\.write\(\'document\.cookie\'\)\;\"$
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
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
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
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');"