Regulärer Ausdruck überprüft URL inkorrekt
Christopher
- php
0 Andavos0 Christopher0 Christopher0 Henryk Plötz
Hallo,
im Folgenden werde ich meinen regulären Ausdruck in mehreren Teilen posten, wobei ich jene Teile mit ">" beginne und mit "<" beende. Diese Zeichen bitte nicht mitinterpretieren ;)
optionales Protokoll
(?:http://)<
Die Domäne mit allen legalen Zeichen + . am Ende
[a-zA-Z0-9][a-zA-Z0-9._-]*.<
optionale beliebig viele Subdomains
(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*<
Länderkürzel
[a-zA-Z]{2,5}<
optional viele Unterverzeichnisse
(?:/[a-zA-Z0-9_%,.=?-]*)*<
optional beendender Slash
(?:/)<
Dummerweise klappt der Ausdruck nicht ;)
Kann jemand den Fehler finden?
Danke euch!!
Hallo,
mit welchem Befehl verarbeitest du den Ausdruck und evt. mal den Script posten ;)
MFG
Andavos
Hier nochmal der komplette Ausdruck:
(?:http://)[a-zA-Z0-9][a-zA-Z0-9._-]*.(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*[a-zA-Z]{2,5}(?:/[^\/:\*?"<>|]*)*(?:/[a-zA-Z0-9_%,.=?-#&]*)*(?:/)
Okay, ich hatte eh direkt nen Fehler in der Angabe für die Unterverzeichnisse. Ich geb mal gekürzten Code an:
-----------------------------------------------------------------------
function check_URL($url) {
$protocol = '(?:http://)';
$domain_main = '[a-zA-Z0-9][a-zA-Z0-9._-]*\.';
$domain_sub = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\.)*';
$laenderkrzl = '[a-zA-Z]{2,5}';
$unterverz = '(?:/[^\\/:\*?"<>|]*)*';
$rest = '(?:/[a-zA-Z0-9_%,.=?-#]*)*';
$ende = '(?:/)';
$domain = "$domain_main$domain_sub$laenderkrzl$unterverz$rest$ende";
$regExp = "$protocol$domain";
echo "<span style="font-size:150%">".$regExp."</span><br>";
return preg_match("/^$regExp$/",$url);
}
if (check_URL("http://forum.de.selfhtml.org/?t=104217&m=642340#antworten") echo "korrekte URL!";
-----------------------------------------------------------------------
Okay, habs jetzt doch noch hinbekommen. Hier zum Merken ( :) ):
(?:http://)[a-zA-Z0-9][a-zA-Z0-9._-]*.(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*[a-zA-Z]{2,5}(?:/[^\/:\*?"<>|]*)*(?:/[a-zA-Z0-9_%,.=?-#&]*)*
Moin,
Länderkürzel
[a-zA-Z]{2,5}<
Hast du irgendwelche moralischen Prinzipien die dich die gTLD .museum nicht mögen lassen oder ist das nur ein Versehen? Mach besser + statt {2,5}, denn mir fällt auf Anhieb keine Regel ein die die Länge der TLD irgendwie beschränken würde. (Jetzt mal davon abgesehen, dass Domainparts nur 64(?) Zeichen haben dürfen.)