NiX: Ist die Variable eine Ziffer?

Halo zusammen.

Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

Vielen Dank und Grüsse,
NiX

  1. moin!

    vielleicht so?
    http://www.php.net/isint

    gruß.
    roger.

    --
    ich widersprech mir immer selber.
    aber das passiert mir gott sei dank nie.
    1. Hi,

      Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

      vielleicht so?
      http://www.php.net/isint

      Bisher wurde dieses Posting 0 mal als hilfreich und 1 mal als nicht hilfreich bewertet. Um ein Posting zu bewerten, müssen Sie sich registrieren.

      Jetzt aber mal raus mit der Sprache! Welcher Forumsteilnehmer hat mit "nicht hilfreich" gestimmt? Und warum?

      Gruss,
      Ludger

      1. Moin!

        Jetzt aber mal raus mit der Sprache! Welcher Forumsteilnehmer hat mit "nicht hilfreich" gestimmt? Und warum?

        Ich war es nicht.

        Vielleicht, weil der OP nach Ziffer und nicht integer fragte. Allerdings lässt sich das nach dem Überprüfen mit is_integer($mixed) (is_int ist ein synonym für is_integer) recht einfach eingrenzen ohne gleich einen regex wie [1]{1}$ zu bemühen... Ziffern des dezimalen Systems sind größergleich 0 und kleiner 10, wie wir in der Schule gelernt haben.

        Daneben wäre ein Link zu is_integer() genauer gewesen, aber den gegebenen halte ich auch im Rahmen des gebotenen für  "richtig genug".

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development

        1. 0-9 ↩︎

        1. Hallo fastix®.

          Daneben wäre ein Link zu is_integer() genauer gewesen, aber den gegebenen halte ich auch im Rahmen des gebotenen für  "richtig genug".

          Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)

          Einen schönen Samstag noch.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
          Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
          [Deshalb frei! - Argumente pro freie Software]
          1. Moin!

            Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)

            Du meinst: $int= (int) $mixed  oder: $int=$mixed*1 ?

            Nein. Da käme unter Umständen 0 heraus. Ich weiss nicht, ob es dem OP recht wäre, verwende das aber selbst, wenn ich eine Zahl übergeben haben will- genau dann wenn ich ausschließen kann, dass 0 ein gültiger Wert ist.

            Hier weitere Möglichkeiten:

            casting oder type-juggling
            settype

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
            1. Hallo fastix®.

              Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)

              Du meinst: $int= (int) $mixed  oder: $int=$mixed*1 ?

              Nein ich meinte eher das Szenario des OP (wenn ich es richig verstanden habe):

              $foo = "20";  
                
              echo '$foo ist: '.ucfirst(gettype($foo)).'<br />';  
              echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');
              

              Einen schönen Samstag noch.

              Gruß, Ashura

              --
              Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
              30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
              Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
              [Deshalb frei! - Argumente pro freie Software]
              1. Moin!

                Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)
                echo '$foo ist: '.ucfirst(gettype($foo)).'<br />';
                echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');[/code]

                Das ist aber "automatische Typenumwandlung".

                Da weder bei is_int() noch bei is_integer() irgendetwas von veraltet 'deprecated' steht würde ich sagen, man kann kann sich für eine gewisse Zukunft darauf verlassen. PHP 5 ist 'neu' und frühestens in einer 6er Version kann das Casting gekennzeichnet werden, wird also noch ein Weilchen, leben. Darüber hinaus macht es im Falle von PHP durchaus Sinn die Variablen zunächst als 'mixed' zu behandeln: Der Datenlieferant sind oft HTML-Formulare (repektive die Useragenten, welche die Eingaben entgegennehmen) oder Textdateien (incl. XML, CSV) und da ist der Typ der übergebenen Daten schlicht nicht vorhersehbar. Die Behandlung als "mixed" macht aber ein Casting und eine Typumwandlung unumgänglich.

                Soweit die Theorie... Die Praxis wird sich erweisen.

                MFFG (Mit freundlich- friedfertigem Grinsen)

                fastix®

                --
                Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                1. Moin!

                  Moin!

                  Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)
                  echo '$foo ist: '.ucfirst(gettype($foo)).'<br />';
                  echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');[/code]

                  Das ist aber "automatische Typenumwandlung".

                  Ups. Da fehlte was:

                  Das ist aber _keine_ "automatische Typenumwandlung". (Der Typ wird nur ermittelt.)

                  MFFG (Mit freundlich- friedfertigem Grinsen)

                  fastix®

                  --
                  Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                2. Hallo fastix®.

                  Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)
                  echo '$foo ist: '.ucfirst(gettype($foo)).'<br />';
                  echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');[/code]

                  Das ist aber "automatische Typenumwandlung".

                  Nunja. Wie würdest du den Vorgang dann bezeichnen, der automatisch in einer Zeichenkette eine Zahl erkennt und als numerisch kennzeichnet?

                  (numeric != int ?)

                  Einen schönen Samstag noch.

                  Gruß, Ashura

                  --
                  Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                  30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                  Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                  [Deshalb frei! - Argumente pro freie Software]
                  1. Moin!

                    echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');[/code]

                    Das ist aber "automatische Typenumwandlung".

                    Siehe meine Korrektur: Das ist aber [_keine_] "automatische Typenumwandlung". in https://forum.selfhtml.org/?t=114570&m=730828.

                    Nunja. Wie würdest du den Vorgang dann bezeichnen, der automatisch in einer Zeichenkette eine Zahl erkennt und als numerisch kennzeichnet?

                    "Typprüfung". "Umgewandelt" wird ja nicht: $foo bleibt, wie und was es ist.

                    Ja, ich bin ein schrecklicher Genauheimer....

                    MFFG (Mit freundlich- friedfertigem Grinsen)

                    fastix®

                    --
                    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                    1. Hallo fastix®.

                      echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');[/code]

                      Das ist aber "automatische Typenumwandlung".
                      Siehe meine Korrektur: Das ist aber [_keine_] "automatische Typenumwandlung". in https://forum.selfhtml.org/?t=114570&m=730828.

                      Die hatte ich gelesen und bei meiner Antwort berücksichtigt.

                      Nunja. Wie würdest du den Vorgang dann bezeichnen, der automatisch in einer Zeichenkette eine Zahl erkennt und als numerisch kennzeichnet?

                      "Typprüfung". "Umgewandelt" wird ja nicht: $foo bleibt, wie und was es ist.

                      Aber $foo ist nicht numerisch. Die Variable $foo ist ein normaler String, würde nicht (intern) umgewandelt, dürfte is_numeric nicht true zurückliefern. Oder verstehe ich dies falsch?

                      Ja, ich bin ein schrecklicher Genauheimer....

                      Dann beantworte mir doch bitte die Frage, die du weggelassen hast:

                      (numeric != int ?)

                      Einen schönen Samstag noch.

                      Gruß, Ashura

                      --
                      Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                      30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                      Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                      [Deshalb frei! - Argumente pro freie Software]
                      1. Moin!

                        Hallo fastix®.

                        echo '$foo ist numerisch: '.(is_numeric($foo) ? 'Ja' : 'Nein');[/code]

                        Das ist aber "automatische Typenumwandlung".
                        Siehe meine Korrektur: Das ist aber [_keine_] "automatische Typenumwandlung". in https://forum.selfhtml.org/?t=114570&m=730828.

                        Die hatte ich gelesen und bei meiner Antwort berücksichtigt.

                        Nunja. Wie würdest du den Vorgang dann bezeichnen, der automatisch in einer Zeichenkette eine Zahl erkennt und als numerisch kennzeichnet?

                        "Typprüfung". "Umgewandelt" wird ja nicht: $foo bleibt, wie und was es ist.

                        Aber $foo ist nicht numerisch. Die Variable $foo ist ein normaler String, würde nicht (intern) umgewandelt, dürfte is_numeric nicht true zurückliefern. Oder verstehe ich dies falsch?

                        Ja, ich bin ein schrecklicher Genauheimer....

                        Dann beantworte mir doch bitte die Frage, die du weggelassen hast:

                        (numeric != int ?)

                        Da die ganzen Zahlen (int) eine Teilmenge aller Zahlen (numeric) sind, sollte die korrekte Antwort lauten: bei der Einschränkung auf genau ein untersuchtes Zeichen sind die Menge der betrachteten Strings mit möglichen ganzen Zahlen und die welche numerische Werte enthalten - unter Beachtung vorstehender Bedingung der Einstelligkeit - übereinstimmend. Es sind genau zehn Strings: '0','1','2','3','4','5','6','7','8','9'.

                        Da die Eulersche Zahl (e) bereits als Symbol für Exponent gebraucht wird ist nicht zu befürchten, dass diese früher oder später als "numerisches Symbol", in is_mumeric() verwendet, ein true liefert.

                        Folgendes Skript führt zu folgenden Ergebnis:

                        <?
                        error_reporting (8);
                        echo '1 ist numerisch: '.(is_numeric(1) ? 'Ja' : 'Nein');
                        echo "<br>";
                        echo '"1" ist numerisch: '.(is_numeric('1') ? 'Ja' : 'Nein');
                        echo "<br>";
                        echo '"1a" ist numerisch: '.(is_numeric('1a') ? 'Ja' : 'Nein');
                        echo "<br>";
                        echo '"1e" ist numerisch: '.(is_numeric('1e') ? 'Ja' : 'Nein');
                        echo "<br>";
                        echo '"1e2" ist numerisch: '.(is_numeric('1e2') ? 'Ja' : 'Nein');
                        echo "<br>";
                        echo 'e ist numerisch: '.(is_numeric(e) ? 'Ja' : 'Nein');
                        echo "<br>";
                        echo '"e" ist numerisch: '.(is_numeric("e") ? 'Ja' : 'Nein');
                        ?>

                        ->

                        1 ist numerisch: Ja
                        "1" ist numerisch: Ja
                        "1a" ist numerisch: Nein
                        "1e" ist numerisch: Nein
                        "1e2" ist numerisch: Ja

                        Notice: Use of undefined constant e - assumed 'e' in /home/srv/www/htdocs/test/numerisch.php on line 13
                        e ist numerisch: Nein
                        "e" ist numerisch: Nein

                        -> Es wird also nur geprüft, ob der mixed-value als Integer zu interpretieren ist. Selbst ungesetzte Konstanten (e) werden nicht als numerisch zurückgegeben.

                        MFFG (Mit freundlich- friedfertigem Grinsen)

                        fastix®

                        --
                        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                        1. Hallo fastix®.

                          Da die Eulersche Zahl (e) bereits als Symbol für Exponent gebraucht wird ist nicht zu befürchten, dass diese früher oder später als "numerisches Symbol", in is_mumeric() verwendet, ein true liefert.

                          Ich verstehe hiervon zwar nur die Hälfte, glaube aber dennoch zu verstehen, was du meinst.

                          Folgendes Skript führt zu folgenden Ergebnis:

                          [...]
                          -> Es wird also nur geprüft, ob der mixed-value als Integer zu interpretieren ist. Selbst ungesetzte Konstanten (e) werden nicht als numerisch zurückgegeben.

                          Etwas anderes hätte mich auch gewundert.

                          Aber danke für den Testfall.

                          Einen schönen Samstag noch.

                          Gruß, Ashura

                          --
                          Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                          30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                          Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                          [Deshalb frei! - Argumente pro freie Software]
                          1. Moin!

                            Da die Eulersche Zahl (e) bereits als Symbol für Exponent gebraucht wird ist nicht zu befürchten, dass diese früher oder später als "numerisches Symbol", in is_mumeric() verwendet, ein true liefert.

                            Ich verstehe hiervon zwar nur die Hälfte, glaube aber dennoch zu verstehen, was du meinst.

                            Eulersche Zahl: Mathematisches Symbol: e
                            Es ist also für Mathematiker eine Zahl und zumindest theorethisch besteht die Möglichkeit, dass diese als globale Konstante in einer beliebigen Programmiersprache (jetzt oder später) mit einer unter Umständen sehr hohen Genauigkeit "vorbelegt" ist. Du hattest mit

                            Meinst du, dass man sich hier auf PHP's automatische Typenumwandlung verlassen sollte. (Jetzt und in Zukunft?)"

                            gefragt, ob man sich in Zukunft sicher sein könne, dass is_numeric() etc. auch in Zukunft wie gewünscht funktioniert.

                            === Also ===

                            In PHP kennzeichnet das "e" in Zahlen ('1.5e2') bereits den (darauf folgenden) Exponenten der Zahl 10. Mit dem Ergebnis der Exponierung ist die, vom e aus betrachtet, linkstehende Zahl zu multiplizierenden um ein Ergebnis in der herkömmlichen Schreibweise zu erhalten.

                            Beispiele:
                            1.5e2 = 1.5*10^2 = 1.5*100 = 150
                            1.5e-2 = 1.5*10^-2 = 1.5*1/100 = 0.015

                            Deshalb liefert is_numeric('1.5e-2') auch ein true, es handelt sich sogennannte expotentielle Schreibweise einer Zahl, welche besonders bei sehr großen oder sehr kleinen Zahlen verwendet wird.

                            Folglich ist das Symbol schon "verbraucht" und es ist nicht zu befürchten, dass das e eines Tages allein einen Wert von rund 2.7182818284 repräsentiert und folglich also is_numeric('e') oder is_numeric("e") oder is_numeric(e) ein true liefert¹. Das bejaht neben der Nichtexistenz von Hinweisen auf eine veraltete und folglich nicht mehr zu verwendende Funktion die Zukunftssicherheit.

                            ¹) Gilt natürlich nur unter der Einschränkung, dass da nicht irgendwo davor ein: define(e, 2.7182818284); steht....

                            MFFG (Mit freundlich- friedfertigem Grinsen)

                            fastix®

                            --
                            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
                            1. Hallo fastix®.

                              === Also ===

                              [...]

                              Sehr gut erklärt, ich danke dir dafür.
                              Nun verstehe ich deine Aussage besser.

                              Einen schönen Sonntag noch.

                              Gruß, Ashura

                              --
                              Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                              30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                              Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                              [Deshalb frei! - Argumente pro freie Software]
  2. Hallo NiX.

    Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

    Hier wirst du wohl mit preg_match arbeiten müssen.

    Die nachzuprüfende Zeichenklasse hast du ja bereits genannt.

    Einen schönen Samstag noch.

    Gruß, Ashura

    --
    Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
    30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
    Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
    [Deshalb frei! - Argumente pro freie Software]
    1. Hi,

      Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

      Hier wirst du wohl mit preg_match arbeiten müssen.

      Die nachzuprüfende Zeichenklasse hast du ja bereits genannt.

      warst Du vielleicht der weiter unten gesuchte "Nicht hilfreich"-Poster?

      Gruss,
      Ludger

  3. echo $begrüßung;

    Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

    is_int()/is_interger() ist dafür nicht geeignet, da damit nur der Typ einer Variable, aber nicht deren Inhalt überprüft wird.

    is_numeric() prüft zwar den Inhalt, erkennt aber auch Fließkommazahlen als gültig an.

    Ein Regex ist schon fast mit Kanonen auf Spatzen geschossen.

    ctype_digit() macht das was du willst mit dem geringsten Aufwand. Das übergebene Argument muss dann aber auch vom Typ string sein. Notfalls hilft da ein expliziter Typecast nach:

    $is_digits = ctype_digit( (string) 123);

    echo "$verabschiedung $name";

    1. Hi,

      Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

      is_int()/is_interger() ist dafür nicht geeignet, da damit nur der Typ einer Variable, aber nicht deren Inhalt überprüft wird.

      es geht erst einmal darum wie die Anforderung aussieht. Und da weiss man da nicht so recht, gehts vielleicht doch um die Pruefung "Ist es eine natuerliche Zahl?" oder gehts um Telefonnummern (:-) oder um - wie vermutet - um eine Zeichenfolge?

      Gruss,
      Ludger

      --
      "Und Du kannst noch so doof sein, hier, im Forum, findet sich immer noch einer, der ist doefer."
      1. echo $begrüßung;

        es geht erst einmal darum wie die Anforderung aussieht. Und da weiss man da nicht so recht...

        Die Anforderung lautete

        Wie kann ich überprüfen, ob eine Zeichenkette eine Ziffer ist? Also nur aus den Zeichen 0-9 entsteht?

        Ich übersetzte mir das "Ziffer" als "Zahl" ansonsten wäre "Zeichen" angebrachter gewesen als "Zeichenkette". (Ja gut, man kann auch einen String der Länge 1 als Zeichen"kette" betrachten.)

        Der OP wird nach der Nennung der Möglichkeiten sicher eine für seinen Zweck geeignete auswählen oder falls wir[tm] seine Aussage missverstanden haben noch mal nachfragen. Davon gehe ich jedenfalls aus.

        echo "$verabschiedung $name";

        1. Hi,

          Der OP wird nach der Nennung der Möglichkeiten sicher eine für seinen Zweck geeignete auswählen oder falls wir[tm] seine Aussage missverstanden haben noch mal nachfragen. Davon gehe ich jedenfalls

          aus.

          ich weiss nicht was "OP" bedeutet, aber - seien wir doch mal ehrlich - da ist einer, der will was (und zahlt moeglicherweise dafuer) und weiss nicht genau, was er wirklich will.

          Viel mehr wissen wir doch nicht, dedl ?!

          Gruss,
          Ludger

          --
          "Und Du kannst noch so doof sein, hier, im Forum, gibts immer noch einen, der ist doefer."
          1. Hello,

            ich weiss nicht was "OP" bedeutet, [...]

            Steht das etwas nicht in den FAQ?
            Dann müssen wird auch nicht wissen. *gg*
            Der vollständig normierte Forumsbesucher verhält sich absolut FAQ-konform, postet nur rechtschreibgeprüften und vollständig validen Text und wagt keine eigenen Ideen vorzuschlagen. Insbesondere reagiert er auf "ich habe keine Kunden"-Posts keinesfalls mit einem geschäftlichen Vorschlag.

            Du siehst, ich lerne auch noch dazu ...

            PS: 'OP' bedeutet 'Original Poster' oder 'Origin Post' o.ä.

            Harzliche Grüße vom Berg
            esst mehr http://www.harte-harzer.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Moin!

              Insbesondere reagiert er auf ... keinesfalls ...

              He Tom! Du musst da nicht drauf rumhacken und das wieder aufwärmen. Bitte!

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix®

              --
              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development