2012-05-24 12 views
5

Out-Kunden können Websites von Domain-Namen eingeben. Sie können auch Mailadressen von ihren Kontakten eingeben.String für Domain/hostName analysieren

Wissen, wir müssen Kunden finden, welche websited whoose Domäne mit den Domänen der Mailadressen verknüpft werden kann.

So ist meine Idee, den Host aus der Webadresse und aus der URL und vergleichen sie

Also, was ist der zuverlässigste Algorithmus zu bekommen den Hostnamen aus einer URL zu extrahieren?

zum Beispiel kann ein Host sein:

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

Das Ergebnis immer foo.com sein sollte

+0

Richtig, mein Fehler –

+0

Punkt der Klarstellung, da Sie das Beispiel mit dem .vu TLD gelöscht sagen Sie nur die Sie interessieren .com TLD oder ist dies eine zu starke Vereinfachung? –

+0

es ist eine Vereinfachung. es könnte jede Art von TLD sein, .de .eu .biz ..... die wichtige Voraussetzung ist, mögliche Kandidaten passender mailadresses zu finden, indem ich Web site Urls schaue –

Antwort

10

Vielmehr bewerten auf unzuverlässige regex Verwendung System.Uri als Berufung für Sie die Analyse zu tun. Verwenden Sie einen Code wie folgt:

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 

Jetzt nur noch die Top-Level-Domain erhalten können Sie:

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

sollte nicht nur zu "com" führen? – mikesjawnbit

+2

@anubhava: uri.GetLeftPart (UriPartial.Authority) gibt den Stammdomänennamen nicht zurück.Stattdessen gibt es den gesamten linken Teil der URL zurück, beginnend mit dem Schema und endend mit dem Port (falls angegeben). AFAIK, die einzige Möglichkeit, den Teildomänenbereich des Hosts zu ignorieren, ist das explizite Abschneiden mit einem 2-Pass-Aufruf von string.LastIndexOf(). –

+0

Bitte update the answer.string tld gibt den root nicht zurück. – LikePod

1

Hier ist ein regulärer Ausdruck, der die URL der passt auf Sie bereitgestellt haben. Grundsätzlich sind http und https usw. optional, ebenso wie das www. Alles ist dann auf einen möglichen Pfad abgestimmt;

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

Dies würde bedeuten, dass;

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

Würde zu

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

die Frage ist was über Subdomains. Ich denke, sie sollten nicht im Ergebnis enthalten sein. so sollte product.mycompany.com in mycompany.com enden. –

+1

Das konnte ziemlich schwierig sein, da Sie die Punkte nicht zählen konnten, um eine Subdomain zu unterhalten (ich denke, was ich versuche zu sagen, ist Sachen wie .co.uk würde Dinge durcheinander bringen). Sie müssten wahrscheinlich zwei Überprüfungen durchführen, eine mit dem obigen Ausdruck und eine, die die Zeichen vor dem ersten Punkt löscht. – cmilhench

+0

Diese Antwort schlägt fehl, wenn Sie einen DNS-Namen mit ungültigen Zeichen ausgewertet haben (z. B. "a! Notit.com") oder eines mit zu vielen Zeichen (über 63) –

Verwandte Themen