preg_match

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Thies
Mitglied
Beiträge: 106
Registriert: 01.07.2002 15:58
Wohnort: Thüringen
Kontaktdaten:

preg_match

Beitrag 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
"credendo vides"
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Manche sind halt doch schneller... (und perfekter ;-) )

Gruß, Philipp
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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().
Thies
Mitglied
Beiträge: 106
Registriert: 01.07.2002 15:58
Wohnort: Thüringen
Kontaktdaten:

Beitrag 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
"credendo vides"
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Thies
Mitglied
Beiträge: 106
Registriert: 01.07.2002 15:58
Wohnort: Thüringen
Kontaktdaten:

Beitrag 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
"credendo vides"
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
Thies
Mitglied
Beiträge: 106
Registriert: 01.07.2002 15:58
Wohnort: Thüringen
Kontaktdaten:

Beitrag 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
"credendo vides"
Antworten

Zurück zu „Coding & Technik“