2013-08-17 10 views
7

Sapete come se andate su facebook.com e inserite un URL nell'area di aggiornamento dello stato verrà automaticamente rilevato e Facebook mostrerà una piccola istantanea di dati da quell'URL/link? A Facebook non interessa nemmeno se inserisci un URL con o senza un protocollo come http://.Come funziona l'algoritmo di corrispondenza URL di Facebook?

Sto cercando di replicare questo comportamento. In questo momento ho questa espressione regolare:

((?:https?:\/\/)?)((?:[a-zA-Z0-9\-]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2})(?:[a-z0-9\._\/~%\-\+&\#\?!=\(\)@]*)?(?:#?(?:[w]+)?)?) 

E lo uso per abbinare gli URL inseriti in una textarea. Tuttavia, ha falsi positivi; corrisponderà a document.write(foo) che chiaramente non è un URL.

Facebook non sembra avere questo problema. Infatti, posso digitare "yahoo.com" nella textarea di Facebook e lo riconoscerà come un URL. Ma se digito "esempio.com" non lo riconoscerà. Quindi, questo significa che Facebook deve fare qualcosa di più della semplice corrispondenza di espressioni regolari. O mi sbaglio di questo?

In conclusione, voglio sapere cosa sta facendo Facebook e voglio sapere come posso replicarlo. Qualsiasi idea, suggerimento o soluzione è molto apprezzata.

Grazie per la lettura.

+1

Questa domanda sembra essere off-topic perché riguarda i dettagli di implementazione di un servizio Web closed-source. –

risposta

0

facebook sta usando div contenteditable che rileva i collegamenti, a vostra fine io vi suggerisco di ascoltare ogni keyup perché ha molteplici usi, ad esempio dopo aver premuto @ vedrete lista di amici troppo

0

forse prima di pubblicare la url indovinato, fa un ping ajax o qualcosa per assicurarsi che l'url candidato sia effettivamente vivo prima di presentarlo?

1

la più semplice delle regex per adattarsi a qualsiasi URL è

[a-z_\.\-0-9]+\.[a-z]+ 

se questo è presente, fare una ricerca sul risultato. se il risultato non riesce, allora non era un url.

Non esiste un modo per sapere se un url è un url se è presentato all'utente senza il prefisso http: //.

la regex corrisponderà a stackoverflow.com nella seguente stringa;

Io uso sempre stackoverflow.com per trovare le risposte di cui ho bisogno.

se si prova "http://www." & regex.match.value si dovrebbe ottenere un URL valido ... o non .. Non lo saprai fino a quando non si effettua una ricerca.

+0

L'unico problema con questo, e con la regex che ho presentato nel mio post, è che c'è una possibilità di falsi positivi. Qualcuno potrebbe digitare "niente di molto. Che cosa fai anche tu?" E "much.what" corrisponderebbe come un URL. Immagino che l'unico modo per superare questo problema sarebbe quello di verificare se il dominio è valido sul lato server. – Sam

+0

non c'è modo di sapere in anticipo se un url è un url senza cercarlo. anche http://stockoverfliw.com può fallire anche se è un formato url valido, ma non è presente webste. Otterrete dei falsi positivi, ma è necessario fare una ricerca per essere sicuri. – Sedecimdies

Problemi correlati