[RESOLU] Regex detection d'URL

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 : [RESOLU] Regex detection d'URL

Re: [RESOLU] Regex detection d'URL

par or 1 » 25 juin 2019, 15:24

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

Re: Regex detection d'URL

par PouleGeante » 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

Re: Regex detection d'URL

par Saian » 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.

Re: Regex detection d'URL

par Spols » 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.

Regex detection d'URL

par PouleGeante » 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