Antwort
 
Themen-Optionen Thema durchsuchen
Alt 25.07.2008, 12:30 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard URL auf Korrektheit prüfen (Umlaute zulassen)

Morgen,
ich habe folgendes Problem.

Ich möchte einen URL auf Korrektheit prüfen. Dabei soll natürlich auch berücksichtigt werden, dass sogenannte Umlaut-Domains ja mittlerweile erlaubt sind.

Ich habe hier den folgenden Ausdruck gefunden:

PHP-Code:
$pattern "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)"
Der Ausdruck wurde von einem Programm erstellt, welches die Erstellung anhand dieser Beschreibung (die Seite an sich scheint es nicht mehr zu geben?) realisiert.

Der scheint aber keine Umlaute mit zu berücksichtigen...
Kann mir jemand helfen?

Hier finde ich auch nicht wirklich das, was ich brauche. :-/
http://regexlib.com/RETester.aspx?regexp_id=1004
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 13:14 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Okay, ich hab nun das hier:
PHP-Code:
(http|https:(//[a-zäöü0-9]+([-.]{1}[a-zäöü0-9]+)*.[a-z]{2,5}(:-)[0-9]{1,5})?/.*)?$/
Ist vielleicht nicht unfehlbar, aber für den 0815-Gebrauch wahrscheinlich(?) in Ordnung.

Meinungen?


Am Rande:
Sind eigentlich Umlaute in Subdomains möglich?

Geändert von Ben (25.07.2008 um 13:29 Uhr)
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 14:05 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Und nochmal ich, weil hier so viel los ist.

Hat nur bedingt etwas mit obigem Problem zu tun, aber manchmal braucht man auch nur pragmatisch zu sein.

Ich möchte überprüfen, ob ein String mit http oder https beginnt und ob mindestens ein Punkt vorhanden ist.
Bestenfalls sollten hinter dem letzten Punkt nur eine begrenzte Anzahl von Zeichen erlaubt sein.

Danke
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 14:33 Nach oben    #4
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 687
Standard

Also erstmal: Es scheint, als würden auch Subdomains damit funktionieren, allerdings sollte man dann schon wissen, wie die Konvertierung abläuft, damit man das im DNS-Server entsprechend einstellen kann (sofern notwendig).

Zur Abfrage selbst habe ich in meinen scripten folgenden RegEx genutzt:

Code:
'°(^|\s)((?:http|https|ftp)\://(?:[\w]+\.)+[\w]+(?:\:[\d]+)?(?:/[\S]*)*)(\s|$)°is'
Dieser RegEx ist sicher nicht perfekt, arbeitet aber bislang sehr zuverlässig. Ich denke, dass man das \w einfach durch die entsprechenden Umlaute erweitern könnte, ohne dass es zu Problemen kommt. Allerdings sind die IDNs je nach TLD unterschiedlich, wie im Artikel auf Wikipedia zu sehen.

Achso, noch etwas: Die Seite zum RFC 1793 ist folgende: ftp://ftp.rfc-editor.org/in-notes/rfc1738.txt
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 14:36 Nach oben    #5
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Hmmm... das naheliegende geht nicht, weil?

Code:
^https?://.*?\.\w{2,4}
Ungetestet, aber irgendwie so sollte es sein...

Ansonsten: Ich hab zwar selbst auch noch keinen, aber bei URLs und E-Mail-Adressen sollte für die Verifikation echt kein Regex zum Einsatz kommen. Kann doch kein Mensch warten sowas.

Edit: Das kommt davon, wenn man nebenher noch was anderes tut.
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 14:40 Nach oben    #6
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Danke, aber ich werde es so machen
Bräuchte da aber nochmal Hilfe. Komme irgendwie nicht damit zu Recht, dass es "mindestens" einen Punkt geben muss.


Als Nachtrag zur Ausgangsfrage bzw. deiner Antwort.
Durch die neue Sonderzeichenregel (so nenn ich das jetzt mal) wird es eben relativ komplex.
Siehe: http://de.wikipedia.org/wiki/Interna...chens.C3.A4tze

.at = 34 neue Zeichen
.de = 92 neue Zeichen
.ch/.li = 32 neue Zeichen

Das nur als Beispiel.
Da ist der Kosten-Nutzen-Faktor bei einer pragmatischen Implementierung definitiv am größten.

Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 14:45 Nach oben    #7
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Zitat:
Zitat von pago Beitrag anzeigen
Hmmm... das naheliegende geht nicht, weil?

Code:
^https?://.*?\.\w{2,4}
Ungetestet, aber irgendwie so sollte es sein...
Explizit dieser Ausdruck geht nicht.

Beispiel: http://www.regex-tester.de/uc_402_de.html
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 14:58 Nach oben    #8
Erfahrener Benutzer
 
Registriert seit: 12.06.2006
Beiträge: 205
Standard

Dann brauchst du einen Greedy-Modifier bzw. musst den Ungreedy abstellen.

Da ja nahezu alle Sonderzeichen erlaubt sind (also nicht nur Umlaute), wäre diese Lösung die richtige. Zusätzlich sollten noch Unterverzeichnisse erlaubt sein - also hintendran eine Überprüfung auf beliebig viele Slashs und weitere Zeichen. Außerdem sind bei der Prüfung fünfstellige TLDs nicht zugelassen - z.B. .travel oder .museum .

Hier: http://www.regex-tester.de/uc_403_de.html (ohne Unterverzeichnis-Pattern).

Geändert von FloB (25.07.2008 um 15:03 Uhr)
FloB ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 15:41 Nach oben    #9
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Zitat:
Zitat von FloB Beitrag anzeigen
Außerdem sind bei der Prüfung fünfstellige TLDs nicht zugelassen - z.B. .travel oder .museum


Kosten-Nutzen ..
Wie oft wird so etwas auf einer Seite, wo sich private Leute aufhalten eingegeben? Ich glaube nicht, dass es sich da um mehr als 0,1% handelt.
Demnach beschränke ich es einfach auf 4 (.info) und gut ist.

Ich habe es aktuell nun so gemacht
PHP-Code:
$pattern '^https?:\/\/(.*){2,}\.\w{2,4}'
Danke für die Antworten.

Geändert von Ben (25.07.2008 um 15:51 Uhr)
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 17:08 Nach oben    #10
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 687
Standard

Ich bedenkt aber schon, dass es mit dem . auch möglich wäre Leerzeichen, Zeilenumbrüche, etc. in due URL einzubauen? Das darf man nämlich nicht (und macht auch keinen Sinn soetwas zuzulassen).
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 17:12 Nach oben    #11
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 687
Standard

Zitat:
Zitat von pago Beitrag anzeigen
[...]
Ansonsten: Ich hab zwar selbst auch noch keinen, aber bei URLs und E-Mail-Adressen sollte für die Verifikation echt kein Regex zum Einsatz kommen. Kann doch kein Mensch warten sowas.
[...]
Ähm, wieso sollte es das NICHT? Es macht sogar sehr viel Sinn, dass man gerade für so dynamische Verifikationen einen RegEx nutzt. Mal ganz ehrlich: Wie häufig hat sich der Aufbau von URLs in den letzten 20 Jahren geändert?!

Ich frage mich übrigens, warum meinem RegEx niemand Beachtung zu schenken scheint, ist der zu kompliziert?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 17:13 Nach oben    #12
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Solange man keinen Schadcode einfügen kann ..

EDIT:
Ich habe ihn mir nicht angeschaut, weil er imho auf den ersten Blick nicht die Angaben aus Post#6 berücksichtigt. Da genau das aber in meinem speziellen Fall sehr wichtig ist .. ist eben die pragmatische Lösung rausgesprungen.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 17:18 Nach oben    #13
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 687
Standard

Nunja, da der Punkt JEDES beliebige Zeichen repräsentieren kann, stellt der RegEx zumindest keinen Schutz vor Schadcode dar. Eine SQL-Injection ist damit durchaus denkbar / möglich, wenn der Rest des Codes nicht passt. Ansonsten würde mich der Gedanke trotz Allem stören, dass der RegEx so "greedy" ist...
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.07.2008, 22:35 Nach oben    #14
Erfahrener Benutzer
 
Registriert seit: 12.06.2006
Beiträge: 205
Standard

Ja, zählen sollte man können

Edit: Alternativ überprüft man auf die TLD + Endung und zusätzlich optionale Subdomains. Das erhöht die Sicherheit vor möglichen Injections. Das Whitespace-Problem sollte natürlich ausgeschlossen werden.
FloB ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.07.2008, 09:07 Nach oben    #15
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Bevor das weggeschrieben wird, wird sowieso noch mit stripslashes und Konsorten gearbeitet. Ich sehe aktuell nicht, wie mehr "Schaden", als ein "kaputter" Link entstehen sollte.

Wenn jemand http://test_blubb mist.de eingibt .. jo, und?
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.07.2008, 11:21 Nach oben    #16
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Ich werd noch wahnsinnig!

Habe noch etwas weitergemengt und habe nun das hier als RegExp
Code:
https?:\/\/.{2,}\.\w{2,}
Kleine Testreihe sieht man hier: http://www.regex-tester.de/uc_406_de.html

Mich stört das \w am Ende, da es ja alphanumerische Zeichen durchlässt. Eine Domainendung kann aber ja nur aus Buchstaben bestehen, oder? Bei dem ganzen TLD-Hickhack weiß ich mittlerweile gar nichts mehr bestimmt!

Ich habe versucht das \w einfach gegen ein \D oder ein [a-z] auszutauschen, aber das bringt dann bei der oben verlinkten Testreihe nicht die gewünschten Ergebnisse.
Danke für die weitere Hilfe
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.07.2008, 17:10 Nach oben    #17
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 687
Standard

Meinst du, weil der RegEx auch auf "http://www.ichbineineurlohnekorrektetld.tld123" passt? Dann müsstest du folgendes ans Ende einfügen:

Code:
(?:/|\s|$|:[\d]+)
Damit hast du in Verbindung mit [a-z] die Gewissheit, dass sich am Ende der URL entweder das Ende des Strings befindet, ein Leerzeichen die URL vom restlichen Text trennt (sofern vorhanden), ein Slash folgt oder eine Port-Angabe vorhanden ist. Allerdings hast du dann wieder ein Problem mit URLs bei denen ein Port angegeben wird.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.07.2008, 18:22 Nach oben    #18
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.374
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
eine Port-Angabe vorhanden ist. Allerdings hast du dann wieder ein Problem mit URLs bei denen ein Port angegeben wird.
das widerspricht sich!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.07.2008, 20:14 Nach oben    #19
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Erklär mir das Pattern bitte mal mit Worten. Danke.
Der Port ist schnuppe .. braucht nicht berücksichtigt zu werden.
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.08.2008, 07:21 Nach oben    #20
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

@Ben
Zitat:
Ich möchte einen URL auf Korrektheit prüfen
Mich wundert jetzt ein wenig, dass du dies mit Regex machen willst.
Geht es um URLs die noch nicht vorhanden sind?
Ansonsten würde ich die URL mit einer CURL-Abfrage einfach testen.
CIX88 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SessionID per Url auf Portal-Seite Artemis Fragen ans Team 7 09.07.2007 20:25
[JAVA] Wie man aus Java mit einem PHP-Script kommuniziert sparrow Tutorials 0 25.03.2006 22:24
Variable auf verschiedene Faktoren prüfen. Doggi PHP-Programmierung 22 14.12.2005 23:33
[PHP] Aktuell gespielten Titel von XMMS auf einer Webseite in einer Grafik anzeigen Corvin Tutorials 0 28.11.2005 16:26
[PHP] Wie übergebe ich Daten per URL? Ben Tutorials 0 05.12.2004 14:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26