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?

616voto

Arabela Paslaru Punkte 6484

Versuchen Sie dies, um HTTP-URLs zu validieren ( uriName ist der URI, den Sie testen möchten):

Uri uriResult;
bool result = Uri.TryCreate(uriName, UriKind.Absolute, out uriResult) 
    && uriResult.Scheme == Uri.UriSchemeHttp;

Oder, wenn Sie sowohl HTTP- als auch HTTPS-URLs als gültig akzeptieren wollen (gemäß J0e3gans Kommentar):

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

199voto

Kishath Punkte 4950

Diese Methode funktioniert sowohl mit http als auch mit https. Nur eine Zeile :)

if (Uri.IsWellFormedUriString("https://www.google.com", UriKind.Absolute))

MSDN: IsWellFormedUriString

39voto

Marco Concas Punkte 1213

Versuchen Sie das:

bool IsValidURL(string URL)
{
    string Pattern = @"^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$";
    Regex Rgx = new Regex(Pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    return Rgx.IsMatch(URL);
}

Sie akzeptiert solche URLs:

  • http(s)://www.example.com
  • http(s)://stackoverflow.example.com
  • http(s)://www.example.com/page
  • http(s)://www.example.com/page?id=1&product=2
  • http(s)://www.example.com/page#start
  • http(s)://www.example.com:8080
  • http(s)://127.0.0.1
  • 127.0.0.1
  • www.example.com
  • Beispiel.com

31voto

Erçin Dedeoğlu Punkte 4262
    public static bool CheckURLValid(this string source)
    {
        Uri uriResult;
        return Uri.TryCreate(source, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp;
    }

Verwendung:

string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
  //valid process
}

UPDATE : (eine einzige Codezeile) Danke @GoClimbColorado

public static bool CheckURLValid(this string source) => Uri.TryCreate(source, UriKind.Absolute, out Uri uriResult) && uriResult.Scheme == Uri.UriSchemeHttps;

Verwendung:

string url = "htts://adasd.xc.";
if(url.CheckUrlValid())
{
  //valid process
}

21voto

41686d6564 Punkte 16780

Alle Antworten hier erlauben entweder URLs mit anderen Schemata (z. B., file:// , ftp:// ) oder lehnt menschenlesbare URLs ab, die nicht mit http:// ou https:// (z.B., www.google.com ) was beim Umgang mit Benutzereingaben nicht gut ist .

Ich mache es folgendermaßen:

public static bool ValidHttpURL(string s, out Uri resultURI)
{
    if (!Regex.IsMatch(s, @"^https?:\/\/", RegexOptions.IgnoreCase))
        s = "http://" + s;

    if (Uri.TryCreate(s, UriKind.Absolute, out resultURI))
        return (resultURI.Scheme == Uri.UriSchemeHttp || 
                resultURI.Scheme == Uri.UriSchemeHttps);

    return false;
}

Verwendung:

string[] inputs = new[] {
                          "https://www.google.com",
                          "http://www.google.com",
                          "www.google.com",
                          "google.com",
                          "javascript:alert('Hack me!')"
                        };
foreach (string s in inputs)
{
    Uri uriResult;
    bool result = ValidHttpURL(s, out uriResult);
    Console.WriteLine(result + "\t" + uriResult?.AbsoluteUri);
}

Sortie :

True    https://www.google.com/
True    http://www.google.com/
True    http://www.google.com/
True    http://google.com/
False

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