3

在我正在处理的应用程序中,我们允许用户输入域名列表,我们希望用户以以下格式输入任何域名

但是当将此域名存储回我们的数据库时,我们只想以以下格式存储域名

格式:stackoverflow.com

所以想知道是否有现成的帮手可以用来完成这项工作,或者有什么建议可以有效地完成这项工作。

我试过什么?

这是我想出的,

public static string CleanDomainName(string domain)
{
    domain = domain.Trim();
    if (domain.Split('.').Count() > 2)
    {
        domain = domain.Split('.')[1] + "." + domain.Split('.')[2];
    }
    return domain;
}

请帮我解决这个问题。

4

5 回答 5

6

使用 Regex 替换字符串开头的表达式:

Regex.Replace(input, @"^(?:http(?:s)?://)?(?:www(?:[0-9]+)?\.)?", string.Empty, RegexOptions.IgnoreCase);

这将取代:

  • 开头的最终“http://”(或“https://”)后跟
  • 最终的“www”。(后面还有一个数字,即:www8 或 www23)
于 2012-12-20T10:11:51.027 回答
2

使用Uri类。

string url = "http://www.testsite.com/path/file.html";
Uri uri = new Uri(url);

有各种属性可以检索 url 的不同部分。

使用 uri.Host 获取www.testsite.comurl 的一部分。一点字符串操作可以删除www.;

string domain = uri.Host;
if (domain.StartsWith("www."))
{
    domain = domain.Substring(4);
}
于 2012-12-20T09:48:40.337 回答
1

使用System.Uri类。

 System.Uri uri = new Uri("http://stackoverflow.com/search?q=something");
 string uriWithoutScheme = uri.Host.Replace("www.","") + uri.PathAndQuery;

这会给你:stackoverflow.com/search?q=something

于 2012-12-20T09:48:22.347 回答
-1
public static string CleanDomainName(string url)
{
    var uri = url.Contains("http://") ? new Uri(url) : new Uri("http://" + url);
    var parts = uri.Host.Split('.');
    return string.Join(".", parts.Skip(parts.Length - 2));
}
于 2012-12-20T09:50:11.157 回答
-2
/// <summary>
/// Clears the sub domains from a URL.
/// </summary>
/// <param name="url">The URL.</param>
/// <returns>String for a URL without any subdomains</returns>
private static string ClearUrlSubDomains(Uri url)
{
    var host = url.Host.ToLowerInvariant();
    if (host.LastIndexOf('.') != host.IndexOf('.'))
    {
        host = host.Remove(0, host.IndexOf('.') + 1); // Strip out the subdomain (i.e. remove en-gb or www etc)
    }
    return host;
}

您可以从您的域创建一个新的 Uri,因此调用它将是:

ClearUrlSubDomains(new Uri(domain))

这并不涉及像http://www.something.somethingelse.com这样的网址,但可以通过等效的 while 构造进行修改。

于 2012-12-20T09:51:13.907 回答