2013-08-17 35 views
7

Bạn biết làm cách nào nếu truy cập facebook.com và nhập URL vào văn bản cập nhật trạng thái, nó sẽ tự động được phát hiện và Facebook sẽ hiển thị một chút ảnh chụp nhanh dữ liệu từ URL/liên kết đó? Facebook thậm chí không quan tâm nếu bạn nhập URL có hoặc không có giao thức như http://.Thuật toán khớp URL của Facebook hoạt động như thế nào?

Tôi đang tìm cách sao chép hành vi này. Hiện tại, tôi có cụm từ thông dụng này:

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

Và tôi sử dụng nó để khớp với URL được nhập trong vùng văn bản. Tuy nhiên, nó có dương tính giả; nó sẽ khớp với document.write(foo) rõ ràng không phải là URL.

Facebook dường như không có vấn đề này. Trong thực tế, tôi có thể nhập "yahoo.com" vào vùng văn bản của Facebook và nó sẽ nhận ra nó là một URL. Nhưng nếu tôi gõ "example.com" nó sẽ không nhận ra nó. Vì vậy, điều này có nghĩa là Facebook phải làm một cái gì đó nhiều hơn là chỉ phù hợp với biểu thức chính quy. Hay tôi sai về điều này?

Tóm lại, tôi muốn biết Facebook đang làm gì và tôi muốn biết cách tôi có thể tái tạo nó. Bất kỳ ý tưởng, mẹo hoặc giải pháp nào đều được đánh giá cao.

Cảm ơn bạn đã đọc.

+1

Câu hỏi này dường như không có chủ đề vì đó là về chi tiết triển khai của dịch vụ web nguồn đóng. –

Trả lời

0

facebook là sử dụng div contenteditable trong đó phát hiện các liên kết, ở cuối của bạn tôi sẽ đề nghị bạn nghe mỗi KeyUp bởi vì nó có nhiều công dụng ví dụ như sau khi nhấn @ bạn sẽ thấy danh sách bạn bè quá

0

có lẽ trước khi đăng url được đoán, nó có ping ajax hay gì đó để đảm bảo url ứng viên thực sự còn sống trước khi trình bày nó không?

1

đơn giản nhất của regex để phù hợp với bất kỳ url là

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

nếu điều này là hiện nay, làm một tra cứu trên kết quả. nếu kết quả thất bại, thì nó không phải là một url.

Không có cách nào để biết url có phải là url không nếu url được hiển thị cho bạn mà không có tiền tố http: //.

regex sẽ khớp với stackoverflow.com trong chuỗi sau;

Tôi luôn sử dụng stackoverflow.com để tìm câu trả lời tôi cần.

nếu bạn thử "http://www." & regex.match.value bạn sẽ nhận được url hợp lệ ... hoặc không .. Bạn sẽ không biết cho đến khi bạn tra cứu.

+0

Vấn đề duy nhất với điều này, và với regex tôi trình bày trong bài viết của tôi, là có một cơ hội cho dương tính giả. Ai đó có thể gõ "không có gì nhiều. Bạn cũng thế nào?" Và "much.what" sẽ khớp với URL. Tôi đoán cách duy nhất để khắc phục vấn đề này là kiểm tra xem tên miền có hợp lệ ở phía máy chủ hay không. – Sam

+0

không có cách nào để biết trước nếu url là url mà không tra cứu. thậm chí http://stockoverfliw.com có ​​thể thất bại mặc dù định dạng url hợp lệ của nó, nhưng không có webste nào. Bạn sẽ nhận được các kết quả dương tính giả, nhưng bạn cần thực hiện tra cứu để chắc chắn. – Sedecimdies

Các vấn đề liên quan