373 Stimmen

Wie prüft man, ob eine Zeichenfolge eine gültige HTTP-URL ist?

Es gibt die Uri.IsWellFormedUriString y Uri.TryCreate Methoden, aber sie scheinen folgende Ergebnisse zu liefern true für Dateipfade, usw.

Wie prüfe ich, ob eine Zeichenfolge eine gültige (nicht unbedingt aktive) HTTP-URL für die Eingabevalidierung ist?

7voto

Miserable Variable Punkte 27724

Nach Uri.TryCreate können Sie prüfen Uri.Scheme um zu sehen, ob es HTTP(s) gibt.

5voto

Ifeanyi Chukwu Punkte 2951

Als Alternative zur Verwendung einer Regex verwendet dieser Code Uri.TryCreate gemäß OP, prüft dann aber auch das Ergebnis, um sicherzustellen, dass seine Schema eines von http oder https ist:

bool passed =
  Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult)
    && (uriResult.Scheme == Uri.UriSchemeHttp
      || uriResult.Scheme == Uri.UriSchemeHttps);

3voto

user3760031 Punkte 41

Dies würde bool zurückgeben:

Uri.IsWellFormedUriString(a.GetAttribute("href"), UriKind.Absolute)

3voto

Manish Kumar Punkte 101

Problem : Gültige URLs sollten alle der folgenden "Präfixe" enthalten: https, http, www

  • Die Url muss http:// oder https:// enthalten.
  • Url darf nur eine Instanz von www. enthalten.
  • Url Hostname Typ muss Dns sein
  • Maximale Länge der Url ist 100

Solución :

public static bool IsValidUrl(string webSiteUrl)
{
   if (webSiteUrl.StartsWith("www."))
   {
       webSiteUrl = "http://" + webSiteUrl;
   }

   return Uri.TryCreate(webSiteUrl, UriKind.Absolute, out Uri uriResult)
            && (uriResult.Scheme == Uri.UriSchemeHttp
             || uriResult.Scheme == Uri.UriSchemeHttps) && uriResult.Host.Replace("www.", "").Split('.').Count() > 1 && uriResult.HostNameType == UriHostNameType.Dns && uriResult.Host.Length > uriResult.Host.LastIndexOf(".") + 1 && 100 >= webSiteUrl.Length;
}

Validiert mit Unit Tests

Positiver Einheitstest :

    [TestCase("http://www.example.com/")]
    [TestCase("https://www.example.com")]
    [TestCase("http://example.com")]
    [TestCase("https://example.com")]
    [TestCase("www.example.com")]
    public void IsValidUrlTest(string url)
    {
        bool result = UriHelper.IsValidUrl(url);

        Assert.AreEqual(result, true);
    }

Negativer Einheitstest :

    [TestCase("http.www.example.com")]
    [TestCase("http:www.example.com")]
    [TestCase("http:/www.example.com")]
    [TestCase("http://www.example.")]
    [TestCase("http://www.example..com")]
    [TestCase("https.www.example.com")]
    [TestCase("https:www.example.com")]
    [TestCase("https:/www.example.com")]
    [TestCase("http:/example.com")]
    [TestCase("https:/example.com")]
    public void IsInvalidUrlTest(string url)
    {
        bool result = UriHelper.IsValidUrl(url);

        Assert.AreEqual(result, false);
    }

Note : Die IsValidUrl-Methode sollte keine relativen Url-Pfade wie example.com validieren.

Siehe :

Sollte ich relative oder absolute URLs verwenden?

1voto

Eranda Punkte 804
Uri uri = null;
if (!Uri.TryCreate(url, UriKind.Absolute, out uri) || null == uri)
    return false;
else
    return true;

Hier url ist die Zeichenkette, die Sie testen müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X