Wie filtere ich diese Variable?
marc
- php
0 Dieter Raber0 MudGuard0 Dieter Raber
Moin
in einem Script ist es nötig, zu überprüfen, ob eine Variable nur aus Kleinbuchstaben besteht und nicht über 15 Zeichen lang ist. Die Längenüberprüfung funktioniert über strlen() und arbeitet, aber dieser Codeteil will nicht so recht:
if(!eregi("[a-z]",$inhalt)) {
die("Hacking attempt");
}
Hallo marc,
Eigentlich ist es ueberfluessig, hier einen regulaeren Ausdruck zu benutzen, das Script wird nur unnoetig verlangsamt.
Uberpruefe einfach ob strtolower($inhalt) == $inhalt && strlen($inhalt) == 15. Wenn Du es unbedingt mit einem regulaeren Ausdruck machen musst, nimm lieber preg_match() mit dem Ausdruck [1]{15}$. Vergiss dabei die Delimiter nicht, im Klartext preg_match("/[2]{15}$/", $inhalt).
Was das eigentliche Problem der Ueberpruefung betrifft, wuesste ich nicht, wie die Beschraenkung auf 15 Kleinbuchstaben da weiterhilft. Du koenntest aber z.B ueberpruefen, ob deine Variable kein 'http://, ftp://' oder sowas enthaelt. Oder aber du kannst die Includedatei daraufhin ueberpruefen, dass sie in einer Ini-Datei (Stichwort parse_ini_file()) oder was aehnlichem steht, oder aber aus einem bestimmten Verzeichnis geladen wird.
Gruß,
Dieter
Hi,
Hallo marc,
Eigentlich ist es ueberfluessig, hier einen regulaeren Ausdruck zu benutzen, das Script wird nur unnoetig verlangsamt.
Uberpruefe einfach ob strtolower($inhalt) == $inhalt && strlen($inhalt) == 15.
Für $inhalt = "123456789012345" ist strtolower($inhalt) == $inhalt wahr und strlen($inhalt) == 15 wahr - aber der String enthält nicht einen Buchstaben, obwohl er nur Buchstaben enthalten sollte.
cu,
Andreas
Hallo MudGuard,
Stimmt, das habe ich voellig uebersehen, man koennte also noch ueberpruefen, ob $inhalt + 0 == $inhalt ist passiert, aber irgendwann wird's laecherlich. Dann also doch preg_match().
Gruß,
Dieter
Hi,
Stimmt, das habe ich voellig uebersehen, man koennte also noch ueberpruefen, ob $inhalt + 0 == $inhalt ist passiert, aber irgendwann wird's laecherlich.
Das hilft auch nicht - es sollen ja nur Buchstaben sein. Der Test mit der Addition von 0 unterscheidet aber nur Zahlen von nicht-Zahlen.
Aber nicht reine Buchstabenfolgen von Nicht-reinen-Buchstabenfolgen.
"a23456789012345"
cu,
Andreas
Hallo MudGuard,
Wieder Recht behalten... Beim naechsten Mal werde ich es mit Nachdenken probieren, vielleicht ist meine Seele ja so noch zu retten ;-)
Gruß,
Dieter
hi,
Stimmt, das habe ich voellig uebersehen, man koennte also noch ueberpruefen, ob $inhalt + 0 == $inhalt ist passiert, aber irgendwann wird's laecherlich.
außerdem "hilft" es nicht.
$string = '1234abcd';
echo $wert = $string + 0;
echo "<br>\n";
echo ($wert == $string);
ausgabe:
1234
1
(wobei die 1 natürlich einem true entspricht.)
ist ja auch logisch:
$wert enthält, auf grund der addition von 0, einen integer - impliziter type cast von '1234abdc' zu 1234, um überhaupt eine addition damit ausführen zu können.
und beim vergleich $wert == $string wird jetzt $string auch noch implizit in einen integer gecasted - um den vergleich mit dem integer $wert durchführen zu können.
und nein, umdrehen - ($string == $wert) - ändert daran auch nichts.
Dann also doch preg_match().
ja, nehmen wir die ausfahrt, bevor wir uns noch weiter verfahren ;-)
gruß,
wahsaga
Hallo wahsaga,
Dann also doch preg_match().
ja, nehmen wir die ausfahrt, bevor wir uns noch weiter verfahren ;-)
Ach weisst du, manchmal stellt man sich schon ganz schoen bloed an. Ich habe gestern abend mit Vinzenz zusammen gesessen und ein Script geschrieben. An irgendeinem Punkt haben wir so ziemlich alle daemlichen Fehler gemacht, die man so machen kann. Genau die Sorte von Fehlern, wo wir hier im Forum sofort die Oberlehrerkeule ausgepackt haetten ;-).
Gruß,
Dieter