Echt Holler: is_int() funktioniert nicht?

Krüäzi

Ich habe ein Textfeld in das eine ganze Zahl, also zb 7, eingegeben wird.

Wenn ich dann mit is_int() prüfen will ob es ein Integer ist, funktioniert das nicht:

if (!is_int($zahl)) {

print "Das ist keine ganze Zahl!";
}

Es gibt mir immer die Fehlermeldung aus, obwohl es das nicht dürfte.
Was mache ich da falsch? :(

  1. Hallo,

    Was mache ich da falsch? :(

    Ganz einfach:

    is_int(7) => true
    is_int('7') => false

    is_int prüft nur, ob der Typ der Variable "integer" ist, nicht jedoch, ob der Inhalt der Variable eine Zahl ist. Das sind zwei paar Schuhe.

    Du könntest es so machen:

    if (!preg_match ('!^\d+$!', $zahl)) {
      print 'Das ist keine Zahl!';
    }

    Viele Grüße,
    Christian

    --
    Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!
    1. Mit preg_match funktionierts leider auch nicht :(

      1. Halihallo Echt

        if ($answer eq 'Mit preg_match funktionierts leider auch nicht :(') {
           print 'Falsche oder fehlende Beschreibung - Benutzer angehalten';
        }

        Viele Grüsse

        Philipp

        1. Halihallo Echt

          if ($answer eq 'Mit preg_match funktionierts leider auch nicht :(') {
             print 'Falsche oder fehlende Beschreibung - Benutzer angehalten';
          }

          Viele Grüsse

          Philipp

          Was soll ich da noch beschreiben? Auch mit dem vorgeschlagenen preg_match erkennt PHP die Integer Zahl nicht als solche.

    2. Hallo Christian

      Ganz einfach:

      is_int(7) => true
      is_int('7') => false

      is_int prüft nur, ob der Typ der Variable "integer" ist, nicht jedoch, ob der Inhalt der Variable eine Zahl ist. Das sind zwei paar Schuhe.

      Du könntest es so machen:

      if (!preg_match ('!^\d+$!', $zahl)) {
        print 'Das ist keine Zahl!';
      }

      Für solche Fälle würde ich nie reguläre Ausdrücke verwenden. Einfache Lösung
      $x= (int) $variable;
      $x= (string) $x;

      if ($x!==trim($variable)) {
       echo "keine Integerzahl";
      }

      also einfach die Variable explizit in eine Integer umwandeln und wieder zurück in einen String und dann beide per Identitätsvergleich vergleichen.

      Ist auf alle Fälle ressourcenschonender als reguläre Ausdrücke. Holler, per Formular übergebene Variablen sind immer vom Typ String. Das trim entfernt in diesen Fall begrenzende Leerzeichen.

      Viele Grüße

      Antje

      1. Danke, deine Version hat funktioniert!

        Gruß, Holler