[Frage] Regular Expressions in PHP / Javascript

Silver Surger

Gottheit
Hallo Leute,

ich bin totaler Anfänger was Regular Expressions angeht und krieg nicht mal die einfachsten RegEx's selber hin, bislang hab ich mich immer dank Google über Wasser gehalten. Nur in meinem speziellen Fall helfen mir die Google Ergebnisse nicht, weil sie einfach zu spezifisch sind. Ich brauche eine RegEx die mir quasi nur die ersten Buchstaben einer URL überprüft, ist die URL http:// oder https:// soll es eine gültige RegEx sein, ganz egal was dahinter noch stehen mag. Die RegEx's die ich bislang gefunden habe, ließen sich zwar wunderbar auf Serienverlinkungen zu Serienjunkiesseiten nutzen, aber sobald die eine Anisearch Seite matchen sollten, sind die in die Knie gegangen, deswegen such ich auch nur eine RegEx die sich nur auf das http / https konzentriert und mir danach freie Wahl in der Eingabe lässt. Hat da jemand vielleicht eine Antwort parat?

Vielen Dank vorab schonmal für eure Hilfe.
 

Zero

Chief 0perating 0fficer
Teammitglied
Admin
hi
es ist zwar nicht so super toll, aber das hier sollte gehen:

Code:
(https?://)([a-zA-Z\.-]+)[COLOR="#0000FF"](\.[a-zA-Z]*)[/COLOR]
was macht das:
http ist der anfang
dann folgt ein optionales s
dann //
darauf kann alles möglich folgen, vorausgeseztt es ist ein Punkt, oder hat normle URL-Namen bzw. ein -
das + sagt - versuche so viel wie möglich damit zu matchen, bevor du weiter machst
(damit bist du in den meisten fällen schon fertig - der blaue Teil ist prinzipiell obsolet ;P

dann sagen wir, eine URL hat immer einen Punkt.
danach darf wieder alles kommen was gerne möchte, vorausgesetzt es hat nur Buchstabenwerte.
damit triffst du dann sozusagen alle URLs bis zum /
alles was nach und ab dem / kommt, wird hier nicht gechecked ^^
bzw. auch wenn ein ? direkt sich angschließt.
der * macht daraus eine beliebige anzahl ^^
 
Zuletzt bearbeitet:

Api

Novize
Hallo,

Code:
(https?://)([a-zA-Z\.-]+)[COLOR="#0000FF"](\.[a-zA-Z]*)[/COLOR]
Die RegEx ist nicht ganz korrekt, du hast ein paar Zeichen vergessen :) besser, wenn auch nicht perfekt:

Code:
^(https?://)([a-zA-Z0-9äöüÄÖÜ_\.-]+)(\.[a-zA-Z]*)
da das "http" immer vorn stehen muss, ist ein "^" am Anfang der RegEx angebracht. Das "(\.[a-zA-Z]*)" am Ende ist nur für URLs im Internet richtig. Eine Url muss nicht zwingend einen 2nd Level enthalten und dieser ist auch nicht auf Buchstaben begrenzt, da dies jedoch nur in Intranets und Heimnetzwerken vorkommt kann es vermutlich stehen bleiben.
 
Zuletzt bearbeitet:

Silver Surger

Gottheit
Hey danke euch zweien, das hat gut geholfen :).

Jetzt hab ich noch ne andere Frage, mit Regular Expressions die deutsche Datumsschreibweise wiedergeben, dabei müssen zwei Zahlen als Tag (also z. B. 09 und nicht nur 9) zwei Zahlen beim Monat (selbe hier wie beim Tagesbeispiel) und bei der Jahresangabe auch zwingend vier Zahlen vorkommen und natürlich zwischen jeder Angabe ein . gesetzt wird, da ich im Hintergrund noch eine XML Schema Datei am laufen habe, die sich nicht mit nur einer Zahl bei Tag und Monat zufrieden gibt oder mit zwei Zahlen bei der Jahresangabe.

Dieses Beispiel hatte ich schon im Netz gefunden,

^(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[\d]{2}$

Dies ließ aber halt zu dass man die 0 nicht zwingend mit angeben muss bei Tag und Monat und bei Jahr auch einfach mit zwei Ziffern arbeitet. Da mein Verständnis zwar gerade so reicht um zu wissen dass der Ausdruck 0? bedeutet dass eine 0 angegeben werden kann aber nicht muss, steh ich halt vor dem Problem nicht zu wissen wie ich das am besten abändern kann ohne die komplette RegEx zu schrotten. Habt ihr da vllt auch noch einen Tipp für mich? wie gesagt am Ende darf nur eine Datumsangabe wie z. B. 25.05.1995 und nicht 25.5.95 oder sowas möglich sein.

Vielen Dank schon im Voraus.
 

Api

Novize
das ist leicht, einfach die Fragezeichen weglassen ;) also so:
Code:
^(0[1-9]|[12][0-9]|3[01])[/.](0[1-9]|1[012])[/.](19|20)[\d]{2}$
da auch "-" und " " als Trennzeichen erlaubt waren, habe ich auch das gleich noch korrigiert

kleiner Tipp: es gibt tolle Seiten zum herumprobieren mit RegEx z.B. http://regexpal.com/
noch ein Tipp: PHP kennt die Funktion checkdate() um ein Datum zu validieren, dabei wird geprüft ob dieses Datum auch wirklich existiert z.B. würde der 31.02.2012 als falsch erkannt werden
 
Zuletzt bearbeitet:

Zero

Chief 0perating 0fficer
Teammitglied
Admin
_ in URL ist nicht erlaubt
URLS mit umlauten sind allg. immer noch nicht üblich, da nicht international verwendbar ;P
ich hab auch überlegt das mit \w zu machen. aber dann wäre ein _ mit drin.

Die zahlen hab ich vergessen, ja. shit happens ;P

alterantiv könnte mann ein $ ans ende schreiben, um klar zu machen, dass der letzte Bereich am Ende steht.
unnötig aber machbar ;P
 

Api

Novize
ja du hast Recht mit dem Unterstrich, hatte kurz gegoogelt und da stand das dieser erlaubt sei, was aber falsch ist. Ich hatte mich noch kurz gewundert, dachte aber dann das dieser eventuell in Subdomains möglich sei. Da sind wir auch schon bei dem ganz großen Problem beim validieren von Eingaben und RegEx, was ist nun wirklich erlaubt und was nicht? Wenig praxisrelevant aber dennoch interessant zum Thema Zeichen in URLs: http://de.wikipedia.org/wiki/Internationalizing_Domain_Names_in_Applications. Das $ wird nur mit weiteren Änderungen in jedem Fall funktionieren, je nach "Art" der URL.

Das ist echt ein schweres Thema, man kann einfach nicht immer an jede Eventualität denken.
 

Zero

Chief 0perating 0fficer
Teammitglied
Admin
joa

alternativ einfach php dafür nutzen ;P

PHP:
if (filter_var($url, FILTER_VALIDATE_URL) !== false) {
	// $url contains a valid URL
}
 
Oben