Patrick Schröder: funktion preg_match() überprüfen auf Zahlen

Hallo Ihr!

Ich muss euch heute leider mal mit einem Problem nerven, dass ansich recht simpel ist.

Ich möchte gern einen String überprüfen, ob er tatsächlich nur aus Zahlen (0 - 9) besteht. Ich habe herausgefunden, dass die Funktion preg_match() dafür passig ist.
Im Forumsarchiv kann man derzeit leider nicht schauen, da der Server ausgelastet ist und die Beschreibung auf php.net ist auch in der deutschen Anleitung auf englisch. Mein Englisch ist bedingt tauglich, aber durch die Vielzahl der Möglichkeiten, usw. blicke ich da leider nicht durch.

Über Google habe ich außer im Forumsarchiv, welches ja leider grad dicht ist, auch nichts anderes (besseres gefunden).

Von daher verzeiht mir bitte das "nochmalige Posten" eines schon vorhandenen Themas. Kann mir jemand helfen?

Gruß Patrick

  1. Benutze lieber settype und versuch einfach, den Typ Deiner Variable von String auf Integer (oder Double) zu casten, wenn das erfolgreich war (== true), lag in Deinem String eine dem Typ entsprechende gültige Zahl, ansonsten eben nicht (== false).

    http://de.php.net/manual/de/function.settype.php

    Gruß,

    Kim

    1. Hallo Kim,

      ansich passt dein Tipp schon, nur kann es auch vorkommen, dass dieser String z.B. "0005" heißt. Würden bei der Typzuweisung "integer" nicht die ersten Nullen verloren gehen?

      Bin mir da grad nicht sicher, aber der integer-Wert von "0005" müsste ja eigentlich 5 sein, oder?

      Gruß Patrick

      1. Yepp, das hättest Du dann aber auch schreiben müssen, kann ich ja nicht aus dem Posting ahnen ;-)
        Hast jetzt ja noch andere Antworten bekommen, die Dir helfen.
        Ich würde es aber trotzdem mit settype machen, danach die Länge des Strings prüfen und voran die entpsrechenden Nullen hängen :-)
        Ich denke, das ist dann ganz unkompliziert.

        Gruß,

        Kim

        Hallo Kim,

        ansich passt dein Tipp schon, nur kann es auch vorkommen, dass dieser String z.B. "0005" heißt. Würden bei der Typzuweisung "integer" nicht die ersten Nullen verloren gehen?

        Bin mir da grad nicht sicher, aber der integer-Wert von "0005" müsste ja eigentlich 5 sein, oder?

        Gruß Patrick

    2. Hallo!

      Benutze lieber settype und versuch einfach, den Typ Deiner Variable von String auf Integer (oder Double) zu casten, wenn das erfolgreich war (== true), lag in Deinem String eine dem Typ entsprechende gültige Zahl, ansonsten eben nicht (== false).

      Das halte ich für keine gute Idee. Die Funktion gibt nicht FALSE zurück wenn in der Variable andere Zeichen als Zahlen sind, sondern macht daraus ne Zahl. Hast Du mal die Kommentare zu settype() gelesen?

      Zur Umwandlung von Strings in Zahlen siehe: http://de3.php.net/manual/de/language.types.string.php#language.types.string.conversion
      (lässt sich zwar hier nicht zu 100% anwenden, aber es geht in die Richtung)

      Ja, Du hast mit Sicherheit am Ende ne Zahl, aber Du wirst nicht merken wenn da was nicht stimmt. Wenn Du Buchstaben im String hast, dann ist die Zahl die am Ende dabei rauskommt mit Sicherheit Quatsch, weil es schon vorher irgendeinen Fehler oder einen Manipulationsversuch gegeben haben muss. Und aus diesem Grund würde ich das lieber per regExp oder is_numeric() prüfen und ggfs. auf einen Fehler direkt reagieren.

      http://de.php.net/manual/de/function.settype.php

      (Links setzen: </faq/#Q-19>)

      Grüße
      Andreas

  2. hallo patrick,

    eine ziffer kann in regulaeren ausdruecken durch \d
    angesprochen werden. vielleicht hilft dir das weiter.

    http://de.php.net/manual/de/pcre.pattern.syntax.php

    gruss vom bodensee,

    michael

  3. Huhu Patrick

    Ich möchte gern einen String überprüfen, ob er tatsächlich nur aus Zahlen (0 - 9) besteht. Ich habe herausgefunden, dass die Funktion preg_match() dafür passig ist.

    Um eine Zahl zu matchen kannst Du eine "character class" verwenden
    z.B. so

    [0-9]

    oder auch

    \d

    Für eine Folge von Zahlen brauchst Du dann noch einen "quantifier"

    z.B.

    +

    oder

    *

    Um den gesamten String zu prüfen kannst Du Anfang "^" und Ende "$" des Strings in das Pattern aufnehmen.

    Eine denkbare Lösung wäre also z.B.:

    [1]+$

    Detailinformationen dazu findest Du hier
    http://de2.php.net/manual/en/pcre.pattern.syntax.php

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday

    1. 0-9 ↩︎

  4. Zum eindeutigen Verständnis hatte ich evtl. noch was vergessen...

    Die Zahlen-Strings können z.B. so aussehen:
    00005
    01002
    00553
    34005

    die Nullen am Anfang sollten nach Möglichkeit dabei nicht wegfallen. Natürlich könnte man sie hinterher wieder anfügen, wäre aber nicht unbedingt so schick.

    Trotzdem schonmal soweit ein danke an alle Helfenden ;-)

    Gruß Patrick

    1. hallo patrick,

      in perl geht das etwas so:

      if ( $Wert !~ /\d{5}$/ ) { mach_sonst_was ; }

      also dann vielleciht in php:

      if ( ! preg_match ( "/\d{5}/", $Wert ) { mach_sonst_was ; }

      ist aber ungetestet. erneuter gruss,

      michael

    2. Hallo Patrick,

      Die Zahlen-Strings können z.B. so aussehen:
      00005
      01002
      00553
      34005

      Wenn es dir nur darum geht, zu prüfen, ob der String eine Zahl ist, würde ich dir is_numeri() (http://www.php.net/manual/de/function.is-numeric.php) empfehlen. Wenn aber auch die Länge relevant ist, wirst du um reguläre Ausdrücke nicht herumkommen:

      $numeric = preg_match('/^\d{5}$/', $var);

      Schöne Grüße,

      Johannes

      --
      Der folgende Satz ist wahr.         | http://www.zeller-johannes.de/
      Der vorhergehende Satz ist gelogen. |
      ss:| zu:} ls:[ fo:} de:] va:} ch:) sh:( n4:| rl:( br:< js:| ie:{ fl:( mo:}