[RegEx] So ok - Verbesserungen?

Ich habe zwar net so viel erfahrungen mit regex also ich kann es net perfekt, aber du kannst deinen kürzen und du solltest auch an Umlautdomains denken. Zwar ist dasfür ein IDN Converter gedacht aber der FF kann auch Ä direkt Ohne Konvertierung. Jenach de wie du es speichern willst.

Hier mein Vorschlag:
PHP:
/* bei beiden das i hinter der # entfernen wenn groß klein igno nicht sein soll
    öäü hinzufügen wenn auch umlauten gelten sollen @ zeichen entfernen
    wenn keine @ domains erkannt werden sollen
    das \. in den ersten [] entfernen wenn keine subdomains erkannt werden
    sollen
*/
// für de, org, net, com usw. mit datei aufrufen am ende oder ohne
preg_match('#^https?://(www\.)?[-a-z0-9@\.]{3,}([-a-z0-9]{2,})?*[^\.]\.[a-z]{2,4}(/.*)?#i', $search); 

// für co.uk domain
preg_match('#^https?://(www\.)?[-a-z0-9@\.]{3,}([-a-z0-9]{2,})?*[^\.]\.[a-z]{2,4}/?(\.[a-z]{2,4}/)?(/.*)?#i' , $search);

wie gesagt sicher bin ich mir nicht ganz

*edit
https ausgebessert
zeichen anzahl
 
Zuletzt bearbeitet:
neija, dein Regulärer-Ausdruck ist eben sehr löschrig.
Es gehen keine Subdomains, keine https-Verbindungen.

Sollte nach dem [-a-z0-9] nicht noch folgen, wie viele zeichen? also ein {2,} :?:
 
Ok, ich werde das dann nochmal bearbeiten und eure Verbesserungen berücksichtigen.

EDIT: Was haltet ihr hiervon?
Code:
~^https?://([\.-a-z0-9]\.)?[-a-z0-9]{2,}}\.[a-z]{2,4}(\.[a-z]{2,4})?~i
 
Zuletzt bearbeitet:
EDIT: Was haltet ihr hiervon?
Code:
~^https?://([\.-a-z0-9]\.)?[-a-z0-9]{2,}}\.[a-z]{2,4}(\.[a-z]{2,4})?~i

([\.-a-z0-9]\.)?
welchen Sinn macht das denn?
ich denke mal das soll der Part für die Subdomain sein, oder? Warum dann aber nur 1 Zeichen vor dem Punkt?

[-a-z0-9]{2,}}
2 mal eine schließende geschweifte Klammer? ist das nicht ein Syntaxfehler?

(\.[a-z]{2,4})?
Die Domainendung optional?


Kann sein, dass ich nun alles missverstanden habe, wenn ja, dann zerstückel den Regulären Ausdruck bitte mal, und erkläre, was welcher Teil bewirken soll
 
([\.-a-z0-9]\.)?
welchen Sinn macht das denn?
ich denke mal das soll der Part für die Subdomain sein, oder? Warum dann aber nur 1 Zeichen vor dem Punkt?
Jup, is für die Subdomain. Ein Zeichen kann möglich sein, also will ich das nicht unterbinden ;) Und https://b.a.example.com soll ja auch möglich sein, also mehrere Subdomains in einer (oder wie man das nennen soll) ;)

[-a-z0-9]{2,}}
2 mal eine schließende geschweifte Klammer? ist das nicht ein Syntaxfehler?
Jup, hab mich vertippt. Soll nur eine sein.

(\.[a-z]{2,4})?
Die Domainendung optional?
Guck mal davor, da ist das noch mal so ähnlich. Das ist für co.uk (danke strolch00 für die Erinnerung, dass ich sowas berücksichtigen muss) Domains.
Also wäre da für .uk
 
Du must aber auch noch hinter den secondlevel-Domain beriech in deinem Regex irgendwie sowas in der Art hinzufügen

Code:
\.[a-z]{2,4}(\.[a-z]{2,4})?[COLOR="Red"]/([^/]*\.[a-z]{2,4})?[/COLOR]~i

sonst nimmt der doch nie sowas in der Art www.examble.net/irgendeinedatei.html oder liege ich da nu ganz verkehrt bzw. hat sich das erledigt? Zumindet muss doch an die Rote Stelle noch ein (.*) oder nicht?
 
Ne, es geht ja nur um die Domain. Wenn da noch eine Datei hinter ist, klappt das auch, es wird ja nur überprüft, ob die Domain richtig ist. Dateinamen hängen zwar dahinter, aber die sind davon nicht inbegriffen und selbst wenn da was hinter ist, und die Domain korrekt ist, lieft mein preg_match() ein true ;)
 
Deine RegExp sagt aus, dass es nur ein Buchstabe sein darf.

Mal als Orientierung:
Code:
~https?://([a-z0-9-]+\.)*([a-z0-9-]{2,}\.)+([a-z]{2,6})~i
6 Buchstaben für die TLD wegen .museum oder .travel .
 
Oh, stimmt ja. ? ist ja 0 oder 1 zeichen, hab da wohl was verwechselt.
Das es .museum und .travel gibt wusste ich gar nicht.

Dann evt. so?
Code:
~^https?://([-a-z0-9]+\.)*[-a-z0-9]{2,}\.[a-z]{2,6}(\.[a-z]{2,4})?~i