Nettoyer une chaine (expr.Reg)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Nettoyer une chaine (expr.Reg)

Re: Nettoyer une chaine (expr.Reg)

par Ripat » 06 juin 2012, 17:21

Assez d'accord avec Ryle, quand on a la flemme de construire une solution sur les fonctions de chaîne les regex sont bien pratiques.

Une petite suggestion d'optimisation: les parenthèses de la partie optionnelle www ne doivent pas être capturantes. On gagne à peu près 30% en les rendant non-capturantes.
http://lumadis.be/regex/test_regex.php?id=1187

Il n'est pas nécessaire non plus d'échapper les //. On ne gagnera rien en performance en les supprimant mais en lisibilité oui. ^_^

Re: Nettoyer une chaine (expr.Reg)

par visualight » 06 juin 2012, 13:53

Merci Ryle ! Comment vas tu depuis le temps ?

Re: Nettoyer une chaine (expr.Reg)

par Ryle » 06 juin 2012, 13:50

Bah l'expression régulière est bien plus pratique, tu n'es d'ailleurs pas loin... Si toutes tes chaines commencent par http://, tout ce que tu as à vérifier ensuite c'est la présence ou non de la chaine "www." : ^http:\/\/(www\.)?
echo preg_replace("#^http:\/\/(www\.)?#", "", $taChaine);
Tu peux même ajouter un contrôle sur les url sécurisées avec un "http(s)?"

Re: Nettoyer une chaine (expr.Reg)

par visualight » 06 juin 2012, 13:50

Bonjour,

C'est bon, j'ai trouvé ... erreur de ma part pour l'expression régulière.
En effet en mettant comme masque le http:// en premier, la condition renvoyait toujours true.

Il faut donc procéder comme suit :
$subdom = preg_replace("/^(http:\/\/www.|http:\/\/)/", "", $url);
Exemple :
- Pour la chaine http://domaine.google.be, cela renvoie (domaine.google.be)
- Pour la chaine http://www.google.be, cela renvoie (google.be)

Donc plus pratiquement si on veut tester l'existence d'un sous domaine, il faut faire un explode comme suit :
$subdom = preg_replace("/^(http:\/\/www.|http:\/\/)/", "", $url);
$subdom = explode('.', $subdom);

if (!empty($subdom[0])) {
            $subdom = $subdom[0];
        } else {
            $subdom = 'N/A';
        }
Merci,
Raph

Re: Nettoyer une chaine (expr.Reg)

par Mazarini » 06 juin 2012, 13:35

personnellement, j'utiliserai la fonction substr() pour découper la chaine de caractères en testant le début et en conservant la fin si le début contient les chaines recherchées.

Re: Nettoyer une chaine (expr.Reg)

par visualight » 06 juin 2012, 13:32

Ah oui, J'ai testé ceci : mais cela ne fait rien : ^(http:\/\/|http:\/\/www)

Nettoyer une chaine (expr.Reg)

par visualight » 06 juin 2012, 13:24

Bonjour,

Je ne parviens à trouver une bête solution pour nettoyer une chaine.
En fait, j'essaye de supprimer le http:// OU http://www d'une chaine.

Ex.: http://www.google.be doit donner : google.be et http://domaine.google.be doit donner : domaine.google.be

Pouvez-vous m'aider ?

Expression régulière ? Comment ?

Merci :)