Page 1 sur 1

Regex adresse URL

Posté : 25 mai 2009, 19:45
par moejul
Bonsoir ! :)

Je cherche à faire une Regex pour vérifier si l'adresse entrée dans mon champ :
<?php
$motif_site = ''; // Contient la regex
if (!preg_match($motif_site, $_POST['adresse'])) {
	// L'adresse entrée est mauvaise
}
else {
	// L'adresse entrée est correcte
}
?>

J'ai essayé de la faire moi-même, sans succès.
J'ai alors cherché un peu sur le Web, mais aucune ne fonctionnait correctement... :(

Pourriez-vous m'aider ?

La regex doit envoyer :

True pour :
* www.site.com
* http://site.com
* http://www.site.com
* http://www.site.com/dossier1/dossier2
* http://www.site.com/dossier1/page.php
* http://www.site.com/dossier1/dossier2/p ... riable=bla
* http://www.site.com/dossier1/page.php?var1=bla&var2=blo



False pour :

* htttttp://www.site.com
* http:///www.site.com
* http://www.site.com/http://
* http://www.site.com°&|||*{}!
* Autres refus logiques




Merci d'avance ! ^^

Posté : 25 mai 2009, 20:04
par dunbar
Salut,
Comme ceci ça te convient :?:
<?php
$url = "http://www.phpfrance.com/forums/voir_sujet-248146.php";  //Adresse a vérifier.

$verif = @fopen($url, 'r');  //Essaye d'ouvrir le site en lecture seule.
	if ($verif)
		{
			echo '<font color="#00FF40"><b>URL correct.</b></font>';  //Si il a une réponse .
		}
			else
				{
					echo '<font color="#FF0000"><b>URL n\'existe pas !</b></font>'; //Si pas de réponse.
				}


?>

Le tes test simple si il arrive à ouvrir le site c'est OK sinon erreur.

Posté : 25 mai 2009, 20:31
par moejul
Super, c'est encore mieux que ce que je demandais, car ça vérifie si le site existe même si l'URL est valide. :D

Encore une question : j'ai vu que tu avais utilisé un @... Est-il vraiment conseillé de l'utiliser pour éviter les messages d'erreur ?

Merci pour cette réponse rapide et efficace. :)

Posté : 25 mai 2009, 20:45
par dunbar
Super, c'est encore mieux que ce que je demandais, car ça vérifie si le site existe même si l'URL est valide. :D

Encore une question : j'ai vu que tu avais utilisé un @... Est-il vraiment conseillé de l'utiliser pour éviter les messages d'erreur ?

Merci pour cette réponse rapide et efficace. :)
Dans le cas présent je dirais oui sinon, en cas de mauvaise adresse tu va avoir un message d'erreur, qui dans le cas présent ne te sert à rien. :wink:
Puisque ton test te dira URL n\'existe pas !.
Se qui est quand même mieux que ceci : Warning: fopen(http://www.phpfrzance.com/forums/voir_sujet-248146.php) [function.fopen]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Hôte inconnu. in .

Posté : 25 mai 2009, 21:59
par agité
ça donne quoi dans ce cas :
fopen('http://www.monsitedehackerdelamort.fr/hack.php');


Et pourquoi pas tout simplement :
 filter_var($url,FILTER_VALIDATE_URL);


ou un REGEX :
$urlregex = "^(https?|ftp)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?\$";
if (eregi($urlregex, $url)) {echo "good";} else {echo "bad";} 

Après ya tellement de formes possible d'url genre https://monsousdomaine.domaine.fr/ ou des trucs du genre que tu as pas finis à mon avis mais voilà déjà quelque pistes ;)

Posté : 26 mai 2009, 11:49
par moejul
On m'a dit que fopen était à éviter. J'ai donc pris ta regex agité, elle fonctionne ! :)

Par contre, j'ai essayé avec filter_var();
et j'ai obtenu une erreur. Pourquoi ?

Merci ! :D