Feedback

C# - Überprüfen ob String eine URL ist

Veröffentlicht von am 1/11/2011
(1 Bewertungen)
Im Internet bin ich neben Regex auf keine weitere Lösung gekommen.

Gerade wenn es schnell gegen soll, darf es nicht kompliziert sein.

Daher überprüft das Snippet einfach ob URI.Host NULL ist.

Tritt bei überprüfen der URI ein Fehler auf gibt er ebenfalls FALSE aus.

Viel Spaß damit :-)
// Bool
 private bool IsUrl(string url) {
            try
            {
                Uri adresse = new Uri(url);
                if (adresse.Host != null)
                {

                    return true;

                }
                else
                {
                    return false;

                }
            }
            catch {

                return false;
            
            }
        
        }

// Anwendung:

string EchteUrl = "http://www.networkfreaks.de";
string NurText = "Das war ein netter Versuch";

if(IsUrl(EchteUrl))MessageBox.Show("Echte URL ist ECHT");
if(!IsUrl(NurText))MessageBox.Show("NurText ist keine URL!");


///Nutzung frei nach belieben ;-)

10 Kommentare zum Snippet

Christopher Kk schrieb am 1/16/2011:
Die Funktion kannst du auch noch kürzer halten.

private bool IsUrl(string url) {
try
{
Uri adresse = new Uri(url);
return adresse.Host != null;
}
catch {

return false;

}

}

Malte Peters schrieb am 1/24/2011:
gibt es denk ich tausende Wege ;) aber nett :-)
jmrtns schrieb am 2/7/2011:
Tut mir leid, aber das ist ganz schlechter Programmierstil.
1. wenn new Uri(url) keine Exception wirft, ist adresse.Host nie null
2. Eine Exception zu missbrauchen, weil mann anders nicht an die Antwort kommt ist keine Lösung. Eine Exception ist (wie der Name schon sagt) eine Ausnahme. Ein guter Entwickler sollte Exceptions vermeiden, nicht absichtlich auslösen (Wir bauen noch genügend Fehler ungewollt ein ;-) ).
Übrigens, eine Exception ist auch aus Performance-Sicht eine schlechte Wahl.
3.Wenn du schon eine Exception fängst, solltest du nicht generell alle Exceptions fangen, sondern hier nur die UriFormatException. Denn wenn beispielsweise bei einer gültigen URL eine OutOfMemory Exception geworfen würde, würdest du daraus den Schluss ziehen, dass diese URL ungültig ist.

Da ist ein regex doch die bessere Wahl.
vitalienbruder schrieb am 2/7/2011:
Beide Ansätze sind, aus meiner Sicht, sehr unüberzeugend.
xenex schrieb am 5/17/2011:
Um es ohne Exception zu lösen, gibt es doch die statische TryCreate-Methode, die zurückgibt ob das erstellen möglich war.
O.G. schrieb am 8/13/2011:
Also ich hab das immer so Überprüft:
/// <summary>
/// [ Funktion ] Url Check V1
/// </summary>
/// <param name="Str_Url"></param>
/// <returns></returns>
private bool UrLCheck(string Str_Url)
{
//####################################################
// Locale Variabel
bool Str_Rueckmeldung;
//####################################################
try
{
if ((Str_Url.Substring(0, 4) == "www.") || (Str_Url.Substring(0, 7) == "http://")) { Str_Rueckmeldung = true; }
else { Str_Rueckmeldung = false; }
}
catch { Str_Rueckmeldung = false; }
return Str_Rueckmeldung;
}
Scavanger schrieb am 8/19/2011:
Da Snippet von O.G. ist auch nicht besser, nur weil ein String mit http:// oder www. anfängt ist es noch lang keine gültige URL. Was ist z.B. mit SSL (https://... ) ?

Zum Programmierstil wurde schon einiges geschrieben, viel wichtiger ist aber das URL != URI ist. URL: http://de.wikipedia.org/wiki/Uniform_Resource_Identifier

Gültige URIs:
http://dotnet-snippets.de
ftp://ftp.heise.de/
mailto:test@test.de
file:///home/test/test
tel:+49-089-123456
bloedsinn:mit_doppelpunkt

BTW: .host ist nicht null sondern nur ein leerer String wenn kein Host vorhanden ist.

Werden alle von Snippet als gültige URLs erkannt.

Der einzig korrekte Web URLs zu erkennen ist sich klarzumachen was als korrekte URL erkannt werden soll und dann Regex zu verwenden.
RundR schrieb am 9/5/2011:
private bool IsUrl(string url)
{
return Uri.IsWellFormedUriString(url, UriKind.Absolute);
}


Oder etwa nicht, ist doc hviel einfacher ?!
Scavanger schrieb am 9/8/2011:
@RundR:

Nein, das funktioniert nicht, deine Funktion liefert die gleichen Ergebnisse die ich oben beschrieben habe.

Die Frage würde sich auch bei einem Blick in die MSDN erübrigen:

Uri.IsWellFormedUriString-Methode
"Gibt an, ob eine Zeichenfolge wohlgeformt ist, indem versucht wird, einen URI aus der Zeichenfolge zu erstellen. Es wird sichergestellt, dass keine weiteren Escapezeichen in die Zeichenfolge eingefügt werden müssen."
http://msdn.microsoft.com/de-de/library/system.uri.iswellformeduristring.aspx

Nochmal: Hier wird dir URI-Klasse benutzt, eine URI ist aber NICHT automatisch eine URL!
Eine URL ist aber immer eine URI!
RundR schrieb am 9/19/2011:
Klar das ist mir schon bewusst, aber es ist sauberer als der Vorgabecode.

Denke da muss man mit RegularExpressions ran damit man ne saubere prüfung hat.
 

Logge dich ein, um hier zu kommentieren!