- Home
- Categorie
- Coding e Sistemistica
- PHP
- Trovare un url o una mail in una stringa
-
Trovare un url o una mail in una stringa
Ciao,
qualcuno di voi sa come fare per ottenere questo:Ossia, data una stringa trovare che sia un link (con o senza http://) o una mail di modo da generare un codice html del tipo
<a href="">
o
mailto:ecc ecc
Grasssssie
PS: poi facciamo una pillola per questo
-
Per gli URL prova così:
$regex = "/(([a-z0-9][-a-z0-9]+\.)+[a-z]{2,4})/is"; $replace = "<a href=\"http://$1\">$1</a>"; $text = "Testo www.google.com di prova."; $text = preg_replace ($regex, $replace, $text);
Per le e-mail, dipende da quanto vuoi che il riconoscimento sia preciso.
Ho visto regex per il riconoscimento degli indirizzi e-mail che arrivano a diverse centinaia di caratteri.
-
Low, hai un link da consigliarmi per le regex?
-
ho applicato il tuo suggerimento
Ecco il risultato: http://www.autoelaborate.com/recensione145.html
Non è male...anche se mi risolve come link il contenuto dopo la @ e anche parole del tipo
Che bella questa macchina.Mi piace moltissimo.
In questo caso macchina.Mi diventa un link
-
Se ti riferisci ad una regex per le e-mail, posso anche scrivertela io se non cerchi nulla di perfetto.
Altrimenti l'unica altra fonte che conosco è "Mastering Regular Expressions", che è il libro considerato la "bibbia" delle regex. Non so se è stato tradotto in italiano. In questo libro c'è un esempio di una regex che descrive gli indirizzi e-mail, anche quelli più complessi. E' lunghissima.
-
ho trovato questo:
You can do this by using the following code: <?php function hyperlink(&$text) { // match protocol://address/path/ $text = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $text); // match www.something $text = ereg_replace("(^| )(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\">\\2</a>", $text); } ?> You can use this function like this: <?php $line = "Check the links: www.yahoo.com http://www.php.net"; hyperlink($line); // Now, all text that looks like a link becomes a link ?>
Ora è corretto
Grazie mille Low, appena trovo per la mail lo posto.
-
@Tuonorosso said:
Non è male...anche se mi risolve come link il contenuto dopo la @ e anche parole del tipo
Che bella questa macchina.Mi piace moltissimo.
In questo caso macchina.Mi diventa un link
Perché è generica al massimo. Possiamo limitarla agli indirizzi che iniziano con "www." e separati da spazi:
$regex = "'\s(http://)?(www\.([a-z0-9][-a-z0-9]+\.)+[a-z]{2,4})\s'is"; $replace = "\s<a href=\"http://$2\">$2</a>\s";
Può diventare come vuoi, basta che si stabilisce con precisione cosa deve diventare un link e cosa non deve.
Se me lo dici te ne scrivo una precisa, e magari la provo pure, visto che sto programmando alla cieca.
-
@LowLevel said:
Se ti riferisci ad una regex per le e-mail, posso anche scrivertela io se non cerchi nulla di perfetto.
Altrimenti l'unica altra fonte che conosco è "Mastering Regular Expressions", che è il libro considerato la "bibbia" delle regex. Non so se è stato tradotto in italiano. In questo libro c'è un esempio di una regex che descrive gli indirizzi e-mail, anche quelli più complessi. E' lunghissima.
No no, figurati nn star li a sbatterti, ti chiedevo un link che spiegasse la sintassi delle regex in modo abbastanza semplice quanto completo.
Grazie ancora
-
@LowLevel said:
@Tuonorosso said:
Non è male...anche se mi risolve come link il contenuto dopo la @ e anche parole del tipo
Che bella questa macchina.Mi piace moltissimo.
In questo caso macchina.Mi diventa un link
Perché è generica al massimo. Possiamo limitarla agli indirizzi che iniziano con "www." e separati da spazi:
$regex = "'\s(http://)?(www\.([a-z0-9][-a-z0-9]+\.)+[a-z]{2,4})\s'is"; $replace = "\s<a href=\"http://$2\">$2</a>\s";
Può diventare come vuoi, basta che si stabilisce con precisione cosa deve diventare un link e cosa non deve.
Se me lo dici te ne scrivo una precisa, e magari la provo pure, visto che sto programmando alla cieca.
No Low, non ti preoccupare, al massimo sai cosa potresti fare?
Spiegare a grandi linee la sintassi, faresti cosa gradita a molti...o almeno a meGrazie ancora
-
Per le email ho trovato questa:
ereg_replace ('[_a-zA-z0-9\-]+(\.[_a-zA-z0-9\-]+)*\@' . '[_a-zA-z0-9\-]+(\.[a-zA-z]{1,3})+', '[url="mailto:\\0"]\\0', $txt);
Sembra funzionare tutto, guardate qui: http://www.autoelaborate.com/recensione145.html
-
@Tuonorosso said:
Spiegare a grandi linee la sintassi, faresti cosa gradita a molti...o almeno a me
Ok, scriverò una pillola.
Sembra funzionare tutto, guardate qui: http://www.autoelaborate.com/recensione145.html
Dovresti sostituire {1,3} con {1,4}, altrimenti non accetterà i nomi di dominio con suffissi più lunghi di 3 caratteri (ad esempio .info).
-
Fatto, grazie per il suggerimento, riporto il codice poi apro un post dove riassumo tutto in attesa della tua preziona pillola
ereg_replace ('[_a-zA-z0-9\-]+(\.[_a-zA-z0-9\-]+)*\@' . '[_a-zA-z0-9\-]+(\.[a-zA-z]{1,4})+', '[url="mailto:\\0"]\\0', $txt);
-
@LowLevel said:
@Tuonorosso said:
Spiegare a grandi linee la sintassi, faresti cosa gradita a molti...o almeno a me
Ok, scriverò una pillola.
Sembra funzionare tutto, guardate qui: http://www.autoelaborate.com/recensione145.html
Dovresti sostituire {1,3} con {1,4}, altrimenti non accetterà i nomi di dominio con suffissi più lunghi di 3 caratteri (ad esempio .info).
meglio ancora {2,4} visto che minimo è 2 caratteri