Seite 1 von 2

preg_match

Verfasst: 10.01.2003 00:18
von Thies
Hi, ich brauche mal wieder Hilfe, denn ich kapiere das mit dem preg_match einfach nicht.

Wie sieht denn der Befehl aus, um zu testen, ob eine Eingabe folgende Formate hat:

-Zahl (-1, -2, -3, -4 ...)
0
+Zahl (+1, +2, +3,+4 ...)
Zahl (1,2,3,4...)

Kann mir dabei jemand weiterhelfen? Und vielleicht auch erklären, warum der Befehl dann im Ergebnis wie aussieht???

Danke

Frank-Andre

Verfasst: 10.01.2003 00:46
von Pyramide

Code: Alles auswählen

/^[-+]?[0-9]+$/
/ = Pattern Anfang
^ = Zwischen dem als gültig erkannten und dem Anfang des Strings darf nichts stehen
[+-]? = Aus dem Zeichensatz [+-] 0 oder 1 Zeichen (d.h. plus, minus oder nichts)
[0-9]+ = 1 oder Mehr Zeichen von 0-9
$ = Zwischen dem als gültig erkannten und dem Ende des Strings darf nichts stehen
/ = Pattern Ende

Verfasst: 10.01.2003 00:53
von PhilippK
Mal anders gefragt: ist preg_match() wirklich das, was du brauchst?

preg_match() sucht nach einem Muster innerhalb eines Strings. Was du brauchst, ist ein Test, ob es sich um einen Integer-Wert handelt. Das machst du aber besser mit is_int().

Ansonsten mal als Versuch (ohne Garantie):

preg_match("#(\+|\-|)[0-9]+#", $your_var)

# -> Trennung (kann auch was anderes sein)
(\+|\-|) -> entweder +, - oder nichts (+ und - escaped)
[0-9] -> die Zeichen von 0 bis 9
+ mindestens einmal

einziger Haken: -0 und +0 geht auch durch (was durchaus sinnvoll ist)

Aber vielleicht gibt's hier ja jemanden, der so was im Schlaf auswendig kann ;-)

Gruß, Philipp

Verfasst: 10.01.2003 00:54
von PhilippK
Manche sind halt doch schneller... (und perfekter ;-) )

Gruß, Philipp

Verfasst: 10.01.2003 00:59
von Pyramide
PhilippK hat geschrieben:Was du brauchst, ist ein Test, ob es sich um einen Integer-Wert handelt. Das machst du aber besser mit is_int()
Nicht ganz:
http://de.php.net/manual/de/function.is-int.php hat geschrieben:is_int() checks whether the type of the variable is an int, not the contents. If you want to check the contents, you can use is_numeric().

Verfasst: 11.01.2003 13:37
von Thies
Herzlichen Dank, es hat geklappt, es geht und ich verstehe es nun etwas besser, wie das aufgebaut sein muss.

Wenn ich mal helfen kann, schreibt mir.

Frank-Andre

Verfasst: 11.01.2003 13:41
von PhilippK
Thies hat geschrieben:Wenn ich mal helfen kann, schreibt mir.
Wenn du mir die Lotto-Zahlen für nächsten Samstag hättest, würde ich nicht nein sagen... ;-)

Gruß, Philipp

Verfasst: 13.01.2003 10:00
von Thies
Wenn ich die doch nur selber wüßte .... :lol:

Ich habe aber noch eine Frage zu einem Pattern:

bei einer Eingabe will ich prüfen, ob der eingegebene String mit / beginnt und ohne / endet. Dazwischen können Zahlen, Buchstaben, / etc. stehen, es geht um die Eingabe eines Pfades. Geht das so:

"/[\/]{1}\w+^[\/]$/"

Oder wie muss ich das machen?

Danke

Frank-Andre Thies

Verfasst: 13.01.2003 11:48
von Pyramide
Bei so einfachen Sachen solltest du es lieber so machen:

Code: Alles auswählen

if(substr($str,0,1)=='/' && substr($str, strlen($str), 1) != '/')
{
   jo
}
else
{
   nö
}
Wenn es sich um einen PFad auf dem Server handelt, kannst du auch file_exists verwenden; das hat den vorteil, daß auch windows- oder unc pfade funktionieren.

Verfasst: 13.01.2003 12:38
von Thies
Ich danke Dir.

Das mit file_exists ist gut, nur prüfe ich ein Verzeichnis und keine Datei. Ich wollte auch zunächst nur prüfen, ob die Pfad-Angabe von der Syntax her stimmen kann (und mich mit RegExpr. etwas beschäftigen :) )

Nachtrag:
substr($pfad, strlen($pfad)-1, 1) muss der zweite Teil lauten, ist mir gerade aufgefallen, weil er schliessende / nicht erkannte

CU

Frank-Andre