[RESOLU] Regex detection d'URL

Petit nouveau ! | 2 Messages

22 juin 2019, 16:19

Hello,
Je suis le cours php sur Open Classroom et je me retrouve bloqué à un exo qui demande de remplacer toutes les URL par des liens cliquables mais pour une raison qui m'échappe ma Regex semble laisser tout passer et ma variable n'a pas l'air d'être modifiée dans preg_replace
Voici le code :

<form method="post">
<p>
<label for="lien">Votre lien ?</label> <input id="lien" name="lien" /><br />
<input type="submit" value="Vérifier le lien" />
</p>
</form>

if (isset($_POST['lien']))
{
$texte = htmlspecialchars($_POST['lien']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
$texte2 = preg_replace("#https?://.+\.(a-z){2,4}#i", "<a href=$0>$0</a>", $texte);
echo "<br>",$texte2;
}

En inspectant l’élément $texte2 ne vaut que $texte (quel qu’il soit, même s'il ne respecte pas ma Regex) donc n'est pas cliquable.
J'ai beau relire mon code je ne trouve rien qui pourrait l'expliquer
Une âme charitable pour m'aider ?
Merciiiii

Mammouth du PHP | 1967 Messages

22 juin 2019, 16:44

essaye ce site
https://regex101.com/

il est assez volubile avec les regex ca aide vraiment pour les construire. Il y a beaucoup d'erreur dans la tienne.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Mammouth du PHP | 1609 Messages

22 juin 2019, 20:51

Salut c'est l'expression régulière qui n'est pas bonne.

Tu devrais plutôt avoir une expression dans ce style
$texte2 = preg_replace('`https?://(.+)`', '<a href="$0">$0</a>', $texte);
, la parenthèse (.+) peut te pemettre de n'afficher que la partie après le http(s):// si tu veux avec $1.

Attention si l'utilisateur ne démarre pas son lien par http:// ou https:// le preg_replace ne fera rien.
Développeur web depuis + de 20 ans

Petit nouveau ! | 2 Messages

25 juin 2019, 15:13

Merci Spols et Saian de votre aide !
J'ai trouvé le problème j'avais simplement mis des parenthèses au lieu de crochets ! Voici la Regex correcte maintenant :
$texte2 = preg_replace("#https?://.+\.[a-z]{2,4}#i", "<a href=$0>$0</a>", $texte);
Ça détecte bien les liens et ils renvoient désormais vers une page

Mammouth du PHP | 2703 Messages

25 juin 2019, 15:24

regex qui ne fonctionne pas parfaitement pour une url comme :
https://forumff.phpfraffnce.com/topic280133