Précédent   Forum des professionnels en informatique > PHP > Scripts
Scripts Forum d'entraide sur les scripts PHP téléchargés. Les meilleurs scripts PHP, la FAQ scripts PHP, toutes les FAQ PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 19h14   #1
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
Par défaut Expression régulière sur URL

Bonjour,

J'espère poster au bon endroit.

Je cherche un script pour filtrer des messages publicitaires.

J'aimerai en fait interdire tout message qui contient une invitation à venir visiter un site commercial du style:

"venez faire un tour sur www.toto.com"

- Ce doit pas être très dur à faire... mais je suis un newbee en Expression régulière
- attention, je cherche à faire un truc qui tient compte du fait qu'une url peut prendre plusieurs formes:
exemples:
avec ou pas http ou https
avec des chose comme ".fr" ".com" ".eu" etc...

si vous avez quelques éclairages à me proposer ce serait génial :

D'avance merci.
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 20h49   #2
Membre régulier
 
Inscription : novembre 2010
Messages : 102
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 102
Points : 86
Points : 86
Code :
((http:\/\/|https:\/\/)?(www.)?(([a-zA-Z0-9-]){2,}\.){1,4}([a-zA-Z]){2,6}(\/([a-zA-Z-_\/\.0-9#:?=&;,]*)?)?)
Elle est pas mal x)
Soull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 03h33   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Soull Voir le message
Code :
((http:\/\/|https:\/\/)?(www.)?(([a-zA-Z0-9-]){2,}\.){1,4}([a-zA-Z]){2,6}(\/([a-zA-Z-_\/\.0-9#:?=&;,]*)?)?)
Elle est pas mal x)
pourquoi a-zA-Z ?
pourquoi www ?

le mieux c'est quand même le : (http:\/\/|https:\/\/)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 12h26   #4
Membre régulier
 
Inscription : novembre 2010
Messages : 102
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 102
Points : 86
Points : 86
http://eXample.Com renvois sur example.com (en tout cas sur chrome)

La regex c'est:

(http ou https ://) [non obligatoire] (www.) [non obligatoire] domaine [min maj nombre + sous domaine gerer ] . fr/com
Soull est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 16h01   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
tu peux largement simplifier

(?:https?:\/\/)?[^\/]+\.\w+\S+
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 20h17   #6
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
super d'avoir des réponses aussi rapide.

Les regex c'est encore du chinois pour moi mais ça va bien m'aider à avancer !

Par contre quand j'utilise la solution de stealth35, ça me génère une erreur:

Code :
1
2
3
4
5
6
7
8
9
 
if (preg_match('(?:https?:\/\/)?[^\/]+\.\w+\S+', 'bienvenue sur www.monsite.com'))
{
    echo 'VRAI';
}
else
{
    echo 'FAUX';
}
ça me génère:

Warning: preg_match() [function.preg-match]: Unknown modifier '?'

je crois comprendre qu'il faut échapper le ? mais c'est pire encore si je l'échappe....

quelqu'un pour m'éclairer là dessus ?

Mais si j'utilise la solution de Soull, ça ne génére aucune erreur
et ça fonctionne presque à 100%:

en fait sur:
'bienvenue sur www.monsite.com' ==> affiche VRAI
'bienvenue sur www.monsite' ==> affiche VRAI
'bienvenue sur monsite' ==> affiche VRAI (c'est normal)
'bienvenue sur http://monsite' ==> affiche FAUX (problème, le http n'est pas détecté)
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 04h06   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par dany013 Voir le message
super d'avoir des réponses aussi rapide.

Les regex c'est encore du chinois pour moi mais ça va bien m'aider à avancer !

Par contre quand j'utilise la solution de stealth35, ça me génère une erreur:

Code :
1
2
3
4
5
6
7
8
9
 
if (preg_match('(?:https?:\/\/)?[^\/]+\.\w+\S+', 'bienvenue sur www.monsite.com'))
{
    echo 'VRAI';
}
else
{
    echo 'FAUX';
}
ça me génère:

Warning: preg_match() [function.preg-match]: Unknown modifier '?'

je crois comprendre qu'il faut échapper le ? mais c'est pire encore si je l'échappe....

quelqu'un pour m'éclairer là dessus ?

Mais si j'utilise la solution de Soull, ça ne génére aucune erreur
et ça fonctionne presque à 100%:

en fait sur:
'bienvenue sur www.monsite.com' ==> affiche VRAI
'bienvenue sur www.monsite' ==> affiche VRAI
'bienvenue sur monsite' ==> affiche VRAI (c'est normal)
'bienvenue sur http://monsite' ==> affiche FAUX (problème, le http n'est pas détecté)
oui t'as oublié le délimiteur...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 08h50   #8
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
Citation:
Envoyé par stealth35 Voir le message
oui t'as oublié le délimiteur...
le délimiteur ? là je vois pas trop...
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 13h28   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par dany013 Voir le message
le délimiteur ? là je vois pas trop...
http://www.php.net/manual/fr/regexp....delimiters.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 15h45   #10
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
Ah ok !

du coup j'ai fait avec les délimiteurs:

Code :
1
2
 
if (preg_match('#(?:https?:\/\/)?[^\/]+\.\w+\S+#', 'bienvenue sur http://monsite'))
C'est parfait ça marche et sans erreur,
mais le test ne détecte toujours pas le "http"
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 17h23   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
faillait plus mettre des / en délimiteurs
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 17h31   #12
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
Citation:
Envoyé par stealth35 Voir le message
faillait plus mettre des / en délimiteurs
j'ai pas bien compris, tu peux corriger mon exemple s.t.p ?

ce sont les 2 solutions qui ne détectent pas le http:
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 09h52   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par dany013 Voir le message
j'ai pas bien compris, tu peux corriger mon exemple s.t.p ?

ce sont les 2 solutions qui ne détectent pas le http:
'/(?:https?:\/\/)?[^\/]+\.\w+\S+/'
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 10h27   #14
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
Merci stealth35 de m'avoir répondu, mais ça ne marche toujours pas

je sais je dois être un boulet mais je ne suis vraiment pas à l'aise avec les regex

quand je fais:

Code :
1
2
3
4
5
6
7
8
9
 
if (preg_match('/(?:https?:\/\/)?[^\/]+\.\w+\S+/' , 'bienvenue sur http://monsite'))
{
    echo 'URL détectée';
}
else
{
    echo 'Aucune URL';
}
J'ai comme réponse: 'Aucune URL'
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 10h34   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
normale c'est pas une url valide...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 10h51   #16
Invité de passage
 
Inscription : juin 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 13
Points : 2
Points : 2
Merci pour toutes ces lumières,
cela constitue une bonne base de réflexion
pour aller plus loin dans ma démarche
dany013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h38.


 
 
 
 
Partenaires

Hébergement Web