2013-08-17 11 views
7

Czy wiesz, że jeśli przejdziesz na facebook.com i wprowadzisz adres URL w polu tekstowym aktualizacji statusu, zostanie on automatycznie wykryty, a Facebook wyświetli małą migawkę danych z tego adresu URL/linku? Facebook nie przejmuje się nawet wprowadzaniem adresu URL z lub bez protokołu takiego jak http://.Jak działa algorytm dopasowywania adresów URL Facebooka?

Szukam replikacji tego zachowania. Obecnie mam to wyrażenie regularne:

((?: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]+)?)?) 

Używam go do dopasowywania adresów URL wprowadzonych w obszarze tekstowym. Jednak ma fałszywe alarmy; będzie pasować do document.write(foo), co oczywiście nie jest adresem URL.

Facebook wydaje się nie mieć tego problemu. W rzeczywistości mogę wpisać "yahoo.com" w obszar tekstowy Facebooka, który rozpozna go jako adres URL. Ale jeśli napiszę "example.com", to go nie rozpozna. Oznacza to, że Facebook musi robić coś więcej niż tylko dopasowywanie wyrażenia regularnego. Czy nie mam racji co do tego?

Podsumowując, chcę wiedzieć, co robi Facebook, i chcę wiedzieć, w jaki sposób mogę go powielić. Wszelkie pomysły, wskazówki i rozwiązania są bardzo doceniane.

Dzięki za przeczytanie.

+1

To pytanie wydaje się być nietypowe, ponieważ dotyczy szczegółów implementacji usługi internetowej o zamkniętym kodzie źródłowym. –

Odpowiedz

0

facebook korzysta contenteditable div, który wykrywa łącza, na swój koniec proponuję wam słuchać każdego keyup ponieważ ma wiele zastosowań, np po naciśnięciu @ zobaczysz listę znajomych zbyt

0

może przed zaksięgowaniem odgadnąć URL, czy robi ping ajax lub coś, aby upewnić się, że adres URL kandydata rzeczywiście żyje przed jego przedstawieniem?

1

najprostszych regex dopasować każdy URL jest

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

jeśli jest obecny, zrobić odnośnika na wynik. jeśli wynik nie powiedzie się, to nie jest adres URL.

Nie ma sposobu, aby określić, czy adres URL jest adresem URL, jeśli jest prezentowany bez prefiksu http: //.

regex będzie pasować do stackoverflow.com w następującym ciągu;

Zawsze używam stackoverflow.com, aby znaleźć odpowiedzi, których potrzebuję.

jeśli spróbujesz "http://www." & regex.match.value powinieneś uzyskać poprawny adres URL ... lub nie ... Nie dowiesz się, dopóki nie wykonasz wyszukiwania.

+0

Jedynym problemem związanym z tym, a także z wyrażeniem regularnym, które przedstawiłem w moim poście, jest prawdopodobieństwo fałszywych trafień. Ktoś mógłby wpisać "nic wielkiego. Co ty też robisz?" I "wiele.co" pasowałoby jako adres URL. Sądzę, że jedynym sposobem na pokonanie tego problemu byłoby sprawdzenie, czy domena jest ważna po stronie serwera. – Sam

+0

Nie ma sposobu, aby wiedzieć z góry, czy adres URL jest adresem URL bez sprawdzania. nawet http://stockoverfliw.com może się nie udać, mimo że jest to prawidłowy format adresu URL, ale nie ma tam żadnego websteina. Otrzymasz fałszywe alarmy, ale musisz wykonać wyszukiwanie, aby się upewnić. – Sedecimdies

Powiązane problemy