Regulärer Ausdruck
Fabian
- php
0 Sönke Tesch0 Fabian0 lulu0 Sönke Tesch0 Fabian
Hi!
Ich suche seit einiger Zeit eine Möglichkeit, wie ich eine Zeichenkette prüfen kann.
Diese Zeichen kette darf nur Kleinbuchsaben, Ziffern und den Unterstrich enthalten. Aber KEINE Leerzeichen.
Ich bin am Verzweifeln.
Fabian
Ich suche seit einiger Zeit eine Möglichkeit, wie ich eine Zeichenkette prüfen kann.
Diese Zeichen kette darf nur Kleinbuchsaben, Ziffern und den Unterstrich enthalten. Aber KEINE Leerzeichen.
Ich bin am Verzweifeln.
Völlig unnötig, was Du suchst, ist (wiedermal) nur zwei Klicks von der Startseite der PHP-Anleitung entfernt:
http://www.php.net/manual/de/function.preg-match.php
http://www.php.net/manual/de/pcre.pattern.syntax.php
Was Du als Muster brauchst, ist eine sich wiederholende ("Repetition") Zeichengruppe ("character class"), sowie ^ und $, um das Muster am Anfag bzw. Ende des Textes "festzumachen".
Gruß,
soenk.e
Völlig unnötig, was Du suchst, ist (wiedermal) nur zwei Klicks von der Startseite der PHP-Anleitung entfernt:
Kann gut sein, dass das für dich nur zwei klicks weg ist.
Ich habe aber noch nie richtig mit regulären Ausdrücken gearbeitet und desshalb eigentlich keine Ahnung wie das ganze funkioniert. In den Büchern, die ich bisher gelesen habe ist das nur unzureichend erläutert worden.
Mein Englisch ist ausserdem noch nicht gut genug (10. Klasse Gymnasium), als dass ich genug verstehen würde um nach der Anleitung von php.net einen richtigen regulären Ausdruck zusammenbauen zu können.
Fabian.
Huhu Fabian
Ich habe aber noch nie richtig mit regulären Ausdrücken gearbeitet und desshalb eigentlich keine Ahnung wie das ganze funkioniert. In den Büchern, die ich bisher gelesen habe ist das nur unzureichend erläutert worden.
Für Deinen Fall sollte es dies tun.
$test="lauter_kleine_buchstaben123";
if(preg_match('/[1]*$/',$test)){
echo "OK ist gut";
}else{
echo "Nö ist nicht gut";
}
Zwischen den /s steht der eigentliche reguläre Ausdruck
^ bedeutet Anfang der zu prüfenden Zeichenkette
$ bedeutet Ende der zu prüfenden Zeichenkette
in [] steht eine Definition einer Menge von Zeichen
in diesem Fall Kleinbuchstaben "a-z", Zahlen "0-9" und der Unterstrich "_"
* bedeutet beliebige Wiederholung des vorangehenden Zeichens bzw. in diesem Fall der Menge von Zeichen.
Viele Grüße
lulu
a-z0-9_ ↩︎
Völlig unnötig, was Du suchst, ist (wiedermal) nur zwei Klicks von der Startseite der PHP-Anleitung entfernt:
Kann gut sein, dass das für dich nur zwei klicks weg ist.
Mein Englisch ist ausserdem noch nicht gut genug (10. Klasse Gymnasium), als dass ich genug verstehen würde um nach der Anleitung von
Also die PHP-Anleitung gibt es (zu einem Teil) auch auf Deutsch und auf der Hauptseite ist sogar wortwörtlich "Reguläre Ausdrücke" aufgelistet. Ich bin mir ziemlich sicher, daß auch Du zumindest bis zur Funktion preg_match() mit wenigen Klicks findest, so fürchterlich schlecht dürfte Dein Englisch in der 10. nicht sein ;)
Dein gesuchtes Konstrukt lautet dementsprechend
/[1]+$/
Also:
1. Außenrum die Schrägstriche.
(^ weiter unten)
2. Eine Auswahl an Zeichen, erkennbar an den eckigen Klammern, und zwar aus dem Bereich a bis z, 0 bis 9 sowie dem Unterstrich. Diese eckige Klammer stellt für sich nur ein Zeichen dar, es darf an dieser Stelle also nur wirklich ein Zeichen vorkommen.
3. Da in Deinem Text mehrere Zeichen vorkommen dürfen, setzt Du hinter die eckige Klammer ein +, d.h. der Inhalt der eckigen Klammer darf ein- oder mehrmals vorkommen.
Ohne ^ und $ würde dieses Muster auf jeden Text zutreffen, weil vor und hinter dem Muster beliebige Dinge erscheinen dürfen:
WQER_a9_QWFWQ
würde passen, weil hier in der Mitte ein _a9_ steht.
4. Damit der Bereich [a-z0-9_] gleich am Anfang des Textes stehen muß, kommt das ^ vornevor. Damit passt obiges Beispiel nicht mehr.
5. Da jetzt immernoch
_a9_QWFWQ
passt, kommt an's Ende ein $, d.h. nach dem Bereich [a-z0-9_] muß das Ende des Textes kommen.
Ich hoffe, das war halbwegs verständlich. Spiel ein bißchen mit dem Krams rum, mach ^ und/oder $ weg, ändere die Wiederholung oder den Inhalt der Zeichenklasse, so lernt man am Besten.
preg_match() kann mit zwei oder drei Argumenten aufgerufen werden. Wird ein drittes angegeben, schreibt preg_match() da die Textstelle rein, die auf das Muster passt. Damit kannst Du vergleichen, was genau passt, nicht nur das etwas passt:
echo preg_match("/[2]+$/","Ein langer Text der wegen der Großbuchstaben und des ß nicht passen wird",$match);
print_r($match);
Und guck unter den oben genannten englischen Stichwörtern in die Anleitung.
Gruß,
soenk.e
Danke!
Ich glaube jetzt habe ich reguläre Ausdrücke soweit verstanden.
Bei meinen eigenen Versuchen war ich sogar schon soweit gekommen, dass ich den Ausdruck in den eckigen Klammern richtig, am Anfang ein ^ und die Schrägtriche hatte. Den Rest ($+) hatte ich aber noch nicht.
Jetzt kannst du dir hoffentlich vorstellen, wie verzweifelt ich bei den Tests war, als der Ausdruck nur manchmal gepasst hat :-)
Fabian