2012-05-24 17 views
5

アウトカスタマーはドメイン名からウェブサイトを入力できます。また、連絡先からメールアドレスを入力することもできます。ドメイン/ホスト名の解析文字列

ドメインをメールアドレスのドメインに関連付けることができるwebsited whoという顧客を見つける必要があることを知っています。

は、だから私のアイデアはwebadressからとURLからホストを抽出し、それらを

だから、URLからホスト名を取得するための最も信頼性の高いアルゴリズムが何を比較するのですか?

例えばホストが使用できます

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

結果は常にfoo.com

+0

右、明確化の私のミス –

+0

のポイント、あなたは.vuのTLDとの例を削除したので、あなたは唯一.COMのTLDまたはこれは単純化しすぎている気に言っていますか? –

+0

これは単純化したものです。それはどんな種類のTLD、.de .eu .biz .....でも可能です。 重要な要件は、ウェブサイトのURLを見てメールアドレスに一致する可能性のある候補を見つけることです。 –

答えて

10

よりもむしろに評価されます。あなたが使用できるだけでトップレベルドメインを取得するために今すぐ

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 

:このようなコードを使用し

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

は "com"という結果にならないはずですか? – mikesjawnbit

+2

@anubhava:uri.GetLeftPart(UriPartial.Authority)はルートドメイン名を返しません。その代わりに、スキームから始まりポート(指定されている場合)で終わるURLの左端全体を返します。 AFAIKは、ホストのサブドメイン部分を無視する唯一の方法は、string.LastIndexOf()への2回の呼び出しを使用して明示的に切り捨てることです。 –

+0

answer.stringを更新してください。tldはルートを返しません。 – LikePod

1

でなければなりません。ここのURLのあなたが提供しているマッチする正規表現です。基本的にhttpとhttpsなどはオプションです。wwwはすべてが可能なパスにマッチします。

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

これは、

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

はあなたのための解析を行うために信頼性のない正規表現の使用System.Uriに頼る

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

質問はサブドメインとは何ですか?私は彼らが結果に含まれるべきではないと思う。だからproduct.mycompany.comはmycompany.comに終わるはずです –

+1

サブドメインを楽しむために点数を数えることができないので、それはかなり難しいかもしれません(私が言っていることは、.co.uk物事を混乱させるだろう)。上記の式を持つものと、最初のドットの前にcharを取り除くものの2つのチェックを行う必要があります。 – cmilhench

+0

無効な文字でDNS名を評価すると、この回答は失敗します( 'a!notit.com'など) 、または文字数が多すぎる(63以上) –