Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 31/05/2011, 12h05   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2007
Messages : 115
Points : 14
Points : 14
Par défaut Aide regex nom de domaine

Bonjour,

j'ai besoin d'aide pour une regex !

J'ai un pattern : \.fr|\.es|\.de|\.it

je souhaite rediriger tous les ndd qui n'ont pas ces extensions :

Code :
1
2
3
if(preg_match("/(.*?)(!(\.fr|\.es|\.de|\.it))$/", $host, $matches)) {
        	$routingNecessary = true;
}
le ! devant la liste des extensions ne marche pas. Il est impératif que $matches soit alimenté comme ca je peut rediriger le .com sur le .fr en gardant le résultat de $matches (le domaine).

toto.monsite.com --> toto.monsite.fr

De ce fait je ne peux pas utiliser

if(!preg_match("/(.*?)(\.fr|\.es|\.de|\.it)$/", $host, $matches)) { ... car je ne récupere pas $matches au passage.

Merci de votre aide.
__________________
www.dimitri-vibert.com
Darkcristal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 12h14   #2
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
pas besoin de preg_match pour ça, un substr + strpos suffis
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/05/2011, 12h31   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2007
Messages : 115
Points : 14
Points : 14
$matches est utilisé dans la suite du code...

Il faut donc que je passe par preg_match
__________________
www.dimitri-vibert.com
Darkcristal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 12h54   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 115
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2007
Messages : 115
Points : 14
Points : 14
Ou alors une regex pour récupérer l'extension d'un NDD.

Mais attention aux extensions composées genre .co.uk, .com.tw etc...

Je ne veux pas récupérer que .uk ou .tw

J'ai plusieurs centaines de ndd pour le même site avec pas mal d'extensions composées.

Merci de votre aide.
__________________
www.dimitri-vibert.com
Darkcristal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 17h08   #5
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
pourquoi ne pas décomposer ton code ?

Par le premier preg_match; tu récupère seulement l'extension. puis tu vérifie si l'extension nécessite un redirect ou non
Code :
1
2
3
if(preg_match("/(\..*)$/", $host, $matches)) {
     if (strpos('.fr.es.de.it',$matches[0]) === false) $routingNecessary = true;
}
Par contre assure toi que $host soit bien un nom de domaine.

Pour les noms de domaines composés c'est plus compliqué mais pour domain.co.uk tu auras '.co.uk' dans $matches[0];

Alors tentons cette approche

Code :
1
2
3
4
5
if(preg_match("/(\..*)$/", $host, $matches)) {
     $exts = explode('.',$matches[0]);
     foreach ($exts as $ext) {
          if (strpos('fr|es|de|it',$matches[0]) === false) $routingNecessary = true;
}}
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web