Mitenkä saisin vieraskirjaani sellaisen kuin täällä ohjelmointiputkassa. Kun kirjoittaa viestiin linkin http://www. tai www. alkuisesti siitä voisi klikata sivulle.
Tutkit, missä kohtaa tulee http:// ja aloitat linkin siitä. Päätät linkin seuraavaan välilyöntiin ja linkin osoitteeksi kaivat tuon tekstin (seuraavaan välilyöntiin siis).
Säännöllisillä lausekkeilla tuo kannattanee tehdä - tosin alottelijalta ne saattavat mennä kovaa ja korkealta ohi :) Suosittelen nappaamaan manuaalista jonkun valmiin koodin:
https://www.php.net/manual/en/function.preg-match.php
Jos haluat yrittää ymmärtää mitä säännöllinen lauseke tekee, löytyy tekemästäni PHP: Regular Expressions oppaasta seikkaperäinen ohje miten ja mitä tuo toteuttaa.
leftover: käytin ennen tuota sinun selkeää regex-esimerkkiä, mutta jouduin luopumaan siitä, koska se ei vaan toiminut :) Siitä puuttuu ainakin joitakin merkkejä niiden linkin sisälle hyväksyttävien merkkien joukosta, en muista enää mitä ja jotain muutakin fibaa siinä oli. Nykyään käytän tälläistä hirviötä:
<?php // modified from https://www.php.net/manual/en/function.preg-replace.php#52810 $chr_limit = 30; $add = '...'; $msg = preg_replace( "!((^|\s)http:/{2}[\w\.]{2,}[/\w\-\.\?\&\=\#\;\%]*)!e", "'<a href=\"\\1\">'.(strlen('\\1')>=$chr_limit ? substr('\\1',0,$chr_limit).'$add':'\\1').'</a>'", $msg ); ?>
ja tuo toiminut toistaiseksi ihan kiitettävästi.
Jep, ihan kuten oppaan sivulla mainitaankin:
"Jos haluaisimme tehdä absoluuttisen varmasti toimivan konvertterin, joutuisimme määrittelemään niin monia kohtia että koodi olisi pitkä kuin nälkävuosi. domain ei saisi alkaa eikä loppua tavuviivaan, ainoastaan kauttaviivan jälkeen voitaisiin hyväksyä myös välilyönti, aaltoviiva (tilde) ja muita merkkejä joita ei normaalisti saisi urlissa olla jne.
Niinpä tyydymme versioon jossa http:// tai www. jälkeen hyväksytään kaikki merkit ja lopetetaan linkin teko vasta välilyöntiin tai rivin loppumiseen."
Eli kyseessä on todellakin karu pohja jota voi laajentaa omia tarpeitaan vastaavaksi. Nopeasti katsottuna ainakin #, ; ja % uupuu omasta regexpistäni, lisäksi sinun regexpistä löytyy erittäin tarpeellinen pitkien urlien siistiminen.
Aivan juu, taas ollaan luettu tekstit ajatuksella :) Muuten täytyy kyllä kiittää ja antaa propsit oppaasta, sen avulla olen oppinut regexpejä hieman paremmin ymmärtämään ja taisihan se olla pitkään ainut suomenkielinen vapaa regexp-opas?
Aihe on jo aika vanha, joten et voi enää vastata siihen.