PHP Könnte mir bitte jemand ereg() erklären und dabei helfen?

Hidden Evil

Moderator
Teammitglied
Hi Ihr,

der Titel verrät es ja schon beinahe, denn ich kann mit dieser Definition nicht die Bohne anfangen, daher nicht einmal experimentieren. Andernfalls hätte ich zuerst damit gespielt und hinterher erst gefragt, wäre ich nicht weitergekommen.

Nunja, im Grunde genommen geht es mir darum, dass ich per $text=$_GET['text']; einen String reinbekomme und diesen sowohl auf Länge (klappt wunderbar mit strlen($text)) als auch auf Inhalt prüfen will.

Erlaubt darf nur sein:
a-z (klein, nicht groß!, daher will und kann ich kein eregi() nutzen)
0-9
_ (also nur der Unterstrich, sonst keinerlei Sonderzeichen)

Wie gesagt, die Definition und das Beispiel verraten mir leider gar nichts :(

Wäre klasse, wenn mir da jemand helfen könnte.
Danke und Grüße,

Hidden :)
 
probier mal so:
ereg ("[0-9a-z_]",$text)

du könntest auch noch angeben, wieviele Zeichen der Text mindestest haben muss oder höchstens haben darf
ereg ("[0-9a-z_]{min,max}",$text)


zu dem Beispiel:
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})"

ist eine halbherzige Prüfung auf ein Datum, gültig wäre z.B. 2001-12-10

d.h. erst eine 4-stellige Zahl, Ziffern 0-9, dann ein minus, dann
eine 2-stellige Zahl Ziffern 0-9, wieder ein minus, dann noch eine 2-stellige Zahl Ziffern 0-9

gültig wäre also auch 0123-99-99



Pattern ist ein regulärer Ausdruck
Regulärer Ausdruck ? Wikipedia
 
Klasse, danke Dir :)

Ich probiere das mal aus, wenn ich wieder daheim bin und melde mich dann nochmal :)

#Nachtrag#
Leider gibt ereg immer eine 1 aus, auch wenn ich die nicht-erlaubten Zeichen verwende :(.
 
Naja wenn du A-Z auch willst geht \w ganz sicher einfacher ;)
Code:
preg_match('/^\w{min,max}$/', $text)
 
"leider" deswegen, weil ich davon ausging, dass ereg beim Verwenden von erlaubten oder nicht erlaubten Zeichen zwischen 0 und 1 wechselt, aber in beiden Fällen kommt eine 1 raus.

Nun, der Zusammenhang ist der:
Ich habe eine Sammlung aus gif-Bildern, welche die Buchstaben a-z und die Ziffern 0-9 darstellen. Der Unterstrich gilt als Leerzeichen.
Also a.gif, b.gif, ..., z.gif, 0.gif, ..., 9.gif und auch _.gif
Diese sollen durch den Text, der per GET an das Script übergeben wird, mit imagecopy zusammengesetzt werden.
Das Umwandeln und Zusammensetzen klappt wunderbar, exakt wie gewollt, nur will ich schon an der Quelle verhindern, dass nicht-erlaubte Zeichen genutzt werden, denn dann soll der Text gar nicht generiert werden.

Ich füge mal den bisherigen Code komplett an :).

verborgener Text:
PHP:
<?php

$text=$_GET['text'];
$textlaenge=strlen($text);

if ($textlaenge<=30 && $textlaenge>0)
{

	Header("Content-Type: image/png");
		
		$width = ($textlaenge*14)+5;
		$height = 37;
		$img = ImageCreate($width, $height);
		$background = ImageColorAllocate($img, 150, 150, 150);
		ImageFill($img, 0, 0, $background);
		
		for ($i=0;$i<=($textlaenge-1);$i++)
		{
			imageCopy($img, (imagecreatefromgif ("$text[$i]".".gif")),   (5+($i*14)), 5, 0, 0, 9, 27);
		}
		
	ImagePNG($img);
	ImageDestroy($img);

}
else
{
echo "Erlaubt ist: <br />1) a-z<br />2) 0-9<br />3) _ anstelle eines Leerzeichens<br />4) 1-30 Zeichen";
}

?>
 
Moin..

nimm ein negiertes Regex für preg_match:
[^a-z,0-9_]$
PHP:
$pattern="[^a-z,0-9_]$";
if (preg_match($pattern, $text)) {
// wir haben ein Match ->keine Ausgabe
} else {
// wir haben kein Match -> Bild kann generiert werden.
}
Das liefert dir FALSE, wenn nur diese Zeichen gefunden werden. Bei einem False kannst du also das Bild ausgeben. Bei einem anderen Rückgabewert kannst du das Ergebnis für zB einen Errorhandler verwenden oder schlichtweg verwerfen.
Testen kann man solche RegEx am besten hier:
Rubular: a Ruby regular expression editor and tester
LG
 
Tut mir voll Leid, dass ich Deine Antwort jetzt erst sehe, nach beinahe 5 Monaten :wand
Sobald ich die Gelegenheit habe, probiere ich Deinen Tipp mal aus :).
 
Oben