romy: Prüfung auf Gleichheit bzw. preg_match

Hi,

einen pastellfarbenen Tag wünsche ich Euch allen!

Ich habe festgestellt, dass PHP bei Gelichheitsprüfungen z.T. Probleme macht.

zB.
Prüfe ich mit ==
ist ein String dasselbe wie 0
also 0=="hallo" ergibt true

Wieso?

Desweiteren: mache ich die Abfrage mit ===
ist zwar obiges Problem behoben, aber nun
ist 1===1 false

Das ist sehr ungewöhnlich finde ich, waskann ich da tun, ich muss auf Gleichheit zwier zahlen prüfen und manchmal auch den String mit der Zahl vergleichen, und wenn die Zahl dann 0 ist, passieren diese Dinge.

Desweiteren würde ich gern prüfen ob ich eine Zahl vor mir habe. Dafür gibt es ja is_numeric(), aber dies gibt mirbei 0 wieder false zurück
versucheich es mit preg_match klappt es nicht

pattern: "![1-9]+[0-9]*!"
dort geht auch ".1", aber das ist ja nicht SInn der Sache
Ausserdem weissich auchblossnicht, wie ich die 0 mit einbringen soll,
true soll sein
 Ziffern einschliesslich, aber nicht 005

dazu hätte ich gern noch eine Datumsprüfung
mein VErsuch: "![1]{1,2}."![2]{1,2}.[0-9]{2,4}!"
bei einigen Datumsangaben klappt dies auch nicht
(mir ist egal ob das Datum gültig ist, es soll nur in der richtigen Form stehen)

Kann mir bitte jemand helfen,

danke

ciao\nromy

--
DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN\n\nsh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[\nDie Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html\nEinen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode

  1. 0-9 ↩︎

  2. 0-9 ↩︎

  1. Hallo Romy

    manchmal kann es helfen, auf  if (!($a !== b)) zu prüfen. Ist zwar etwas überwendlich, aber meistens klappts.

    Ich habe da noch irgendwo ne Datei, die heißt falsetest.php. Wenn ich die finde, maile ich sie mal. Da habe ich für unser Projekt auch diese ganzen Untersuchungen angestellt. Insbesondere gibt es hier Versionsunterschiede im Verhalten. Das war damals bei der Umstellung ganz unangenehm.

    Grüße

    Chris (C)

    1. Hi Chris,

      manchmal kann es helfen, auf  if (!($a !== b)) zu prüfen. Ist zwar etwas überwendlich, aber meistens klappts.

      das habe ich sogar probiert, aber es hat bei meinem Problem trotzdem nicht geklappt.
      Momentan benutze ich jetzt Umwandlungen der Datentypen.
      Damit klappt der Operator == wieder normal, da "0" nicht gleich "hallo" ist im Gegensatz zu 0=="hallo"

      danke auf jeden Fall

      ciao
      romy

      --
      DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
      sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
      Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
      Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
      1. Hallo Romy,

        also nochmal zum Thema.

        Die automatische Typbestimmung von implizit deklarierenden Sprachen arbeitet eigentlich immer nach der Methode "Der linke bestimmt den Typ". Also der Zieldatentyp bestimmt den Typ der gesamten Gleichung.

        0 == "hallo" ist also wahr, denn 0 ist ein Skalar und der numerische Wert von "hallo" ist 0. Wenn Du schreiben würdest
        0 == "7hallo", dann wärte das nicht wahr, denn der numerische Wert von "7hallo" ist 7.

        Es empfiehlt sich daher, den Vergleich einfach umzudrehen oder eben auf Identität (===)  zu prüfen.

        "hallo" == 0  ergibt falsch, denn der Zieldatentyp ist jetzt ein String und der ist nicht gleich "0" (Bedenke: die 0 wird automatsich in Typ String, also in "0" umgewandelt vor dem Vergleich)

        Ich hoffe, dass Dir das weiterhilft.

        Grüße

        Chris (C)