Prüfung auf Gleichheit bzw. preg_match
romy
- php
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
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)
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
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)