IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Expression régulière pour sélectionner une URL dans un <textarea> [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Expression régulière pour sélectionner une URL dans un <textarea>
    Bonjour a tous,

    Premier post sur le forum pour moi donc si je me plante de section ou si la syntaxe est moche/incorrect..hésitez pas(en restant cool ).

    Voici mon problème:

    Dans un ma page, j'ai une zone de texte dans laquelle on peut renseigner tout et n'importe quoi. Dont des URL.
    Un fois envoyé, le texte est envoyé en base de donné puis récupéré par la vue sous forme html.
    J'ai fait une fonction pour que les '\n' entré dans la zone de texte soient transformé en <br> ou </br> de manière à afficher le saut de ligne.

    Et c'est là que j'ai mon problème:

    =================SIMULATION==========================================================================================
    Texte dans le textarea du formulaire:

    Bonjour'\n'J'ai un problème: http://www.developpez.net/forums/newthread.php?do=newthread&f=237'\n'C'est qu'il n'y a pas d'espace entre le lien et le '\n'.


    Rendu

    Bonjour
    J'ai un problème: http://www.developpez.net/forums/newthread.php?do=newthread&f=237C'est qu'il n'y a pas d'espace entre le lien et le '\n'.

    =================FIN SIMULATION======================================================================================

    En effet, le <br> généré n'a pas d'espace et je ne sais pas comment modifier mon expression régulière pour récupéré seulement le lien avant le <br> et non pas le reste qui est souligné.

    Fonction & Regex utilisée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     public function  getURL()
        {
    		$in = array(
    		'`((?:https?|ftp)://\\S+)(\\s|\\z)`',
    		'`([[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4}))`'
    	);
     
    		$out = array(
    		'<a href="$1">$1</a>$2',
    		'<a href="mailto:$1">$1</a>'
    	);
     
    	echo preg_replace($in, $out, $this->contenu);
     
    	}
    Si vous avez une idée hésitez pas

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Tu peux t'en tirer en interdisant le < à l'aide d'une classe de caractère "négative" (au sens où on précise les caractères que l'on ne veut pas). Ici, on veut éviter les espaces et les < donc au lieu d'utiliser \S on écrit [^\s<]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function  getURL() {
        $in = array(
            '`(?:https?|ftp)://[^<\s]+`',
            '`[[:alnum:]]+(?:[-_.][[:alnum:]]+)*@[[:alnum:]]+(?:[-_.][[:alnum:]]+)*\.[a-z]{2,4}`'
        );
     
        $out = array(
            '<a href="$0">$0</a>',
            '<a href="mailto:$0">$0</a>'
        );
     
        echo preg_replace($in, $out, $this->contenu);
    }
    Quelques petites remarques sur ton code:
    • pas la peine d'utiliser un double échappement, même si PHP le tolère bien ça ne sert à rien, on est pas en Java ou en R.
    • inutile de créer des groupes de captures (...) quand il n'y a rien à capturer, ça utilise de la mémoire pour rien et ça ralenti de traitement. À la place, utilise des groupes non capturant (?:...) et si tu veux faire une référence à la correspondance complète dans la chaîne de remplacement, utilise $0.
    • écrire \S+(?:\s|\z) est redondant. En effet vu que le quantificateur est gourmand par défaut, la correspondance de \S+ s'arretera obligatoirement avant un espace ou à la fin de la chaîne.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Effectivement CosmoKnacki, ton idée fonctionne parfaitement pour ce que je souhaite faire.

    J'avais fait de nombreuses tentatives sous Notepad ++ grâce à Regex Helper mais sans réussir à utiliser correctement le '^' pour sélectionner ce que je voulais.

    Je te remercie pour ta réponse et ta rapidité

    Problème Résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/11/2010, 13h36
  2. Réponses: 4
    Dernier message: 14/11/2008, 21h00
  3. expression régulière pour reconnaitre une inclusion de fichier en c++
    Par cdm1024 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 27/11/2007, 13h49
  4. Expression régulière pour récupérer une chaîne.
    Par z980x dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/06/2007, 15h01
  5. [RegEx] Expression régulière pour réduire des URL
    Par kivan666 dans le forum Langage
    Réponses: 6
    Dernier message: 11/06/2006, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo