2012-05-24 24 views
5

Khách hàng bên ngoài có thể nhập trang web từ tên miền. Họ cũng có thể nhập mailadresses từ địa chỉ liên lạc của họ.Chuỗi phân tích cú pháp cho Tên miền/tên máy chủ

Biết rằng chúng tôi cần tìm khách hàng có miền whoose trên web có thể được liên kết với tên miền của các ứng viên thư.

Vì vậy, ý tưởng của tôi là để trích xuất máy chủ từ webadress và từ url và so sánh chúng

Vì vậy, các thuật toán đáng tin cậy nhất để có được hostname từ một url là gì?

ví dụ như một máy chủ có thể là:

foo.com 
www.foo.com 
http://foo.com 
https://foo.com 
https://www.foo.com 

Kết quả sẽ luôn là foo.com

+0

Đúng vậy, sai lầm của tôi –

+0

điểm làm rõ, kể từ khi bạn xóa ví dụ với TLD .vu được bạn nói rằng bạn chỉ quan tâm đến năm TLD hoặc đây là một sự đơn giản hóa? –

+0

nó là một sự đơn giản. nó có thể là bất kỳ loại TLD, .de .eu .biz ..... yêu cầu quan trọng là tìm các ứng cử viên có thể phù hợp với mailadresses bằng cách xem url trang web –

Trả lời

10

Thay vì dựa vào không đáng tin cậy sử dụng regex System.Uri để làm phân tích cú pháp cho bạn. Sử dụng mã như thế này:

string uriStr = "www.foo.com"; 
if (!uriStr.Contains(Uri.SchemeDelimiter)) { 
    uriStr = string.Concat(Uri.UriSchemeHttp, Uri.SchemeDelimiter, uriStr); 
} 
Uri uri = new Uri(uriStr); 
string domain = uri.Host; // will return www.foo.com 

Bây giờ để có được chỉ là miền cấp cao nhất bạn có thể sử dụng:

string tld = uri.GetLeftPart(UriPartial.Authority); // will return foo.com 
+1

không nên kết quả chỉ trong "com"? – mikesjawnbit

+2

@anubhava: uri.GetLeftPart (UriPartial.Authority) không trả lại tên miền gốc.Thay vào đó, nó trả về toàn bộ phần bên trái của URL, bắt đầu từ lược đồ và kết thúc bằng cổng (nếu được chỉ định). AFAIK, cách duy nhất để bỏ qua phần phụ miền của máy chủ là để cắt ngắn nó một cách rõ ràng bằng cách sử dụng một cuộc gọi 2-pass để string.LastIndexOf(). –

+0

Vui lòng cập nhật answer.string tld không trả lại thư mục gốc. – LikePod

1

Dưới đây là một biểu hiện thường xuyên mà sẽ phù hợp của url bạn đã cung cấp. Về cơ bản http và https vv là tùy chọn, như là tất cả mọi thứ www sau đó phù hợp với một con đường có thể;

var expression = /(https?:\/\/)?(www\.)?([^\/]*)(\/.*)?$/; 

Điều này có nghĩa là;

var result = 'https://www.foo.com.vu/blah'.replace(expression, '$3') 

Sẽ đánh giá để

result === 'foo.com.vu' 
+0

câu hỏi là về tên miền phụ. tôi nghĩ rằng họ không nên được bao gồm trong kết quả. Vì vậy, product.mycompany.com sẽ kết thúc trong mycompany.com –

+1

Điều đó có thể khá khó khăn vì bạn không thể đếm các dấu chấm để giải trí một tên miền phụ (tôi đoán những gì tôi đang cố gắng nói là những thứ như .co.uk sẽ làm mọi thứ rối tung lên). Bạn có thể phải làm hai kiểm tra, một với các biểu thức ở trên và một trong đó dải của char trước dấu chấm đầu tiên – cmilhench

+0

Câu trả lời này không thành công nếu bạn đánh giá một tên DNS với các ký tự không hợp lệ (chẳng hạn như 'a! Notit.com') , hoặc một với quá nhiều ký tự (trên 63) –

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