Mit if() auf Zahlen von 0 - 20 Prüfen
LastBoyScout
- php
1 Cheatah0 suit0 Tom0 Beat0 LastBoyScout0 suit
0 Cybaer0 LastBoyScout0 suit0 LastBoyScout1 Tom
0 Tom
0 Hopsel0 suit
Hallo,
Wie kann ich in einer if() Anweisung den Inhalt einer Variable auf Zahlen von 0 bis einschließlich 20 Prüfen?
Mit preg_match() könnte es gehen, aber was gebe ich da als Suchmuster an?
Gruß
LSB
Hi,
Wie kann ich in einer
if()Anweisung den Inhalt einer Variable auf Zahlen von 0 bis einschließlich 20 Prüfen?
indem Du 1.) dafür sorgst, dass es Zahlen _sind_ (also insbesondere keine Strings), 2.) prüfst, ob sie in dem Zahlenbereich liegen, und ggf. 3.) um eine Prüfung ergänzt, ob die Werte Deiner Definition von "Zahl" entsprechen. Dieser Punkt kann bereits bei 1.) geschehen sein.
Mit
preg_match()könnte es gehen, aber was gebe ich da als Suchmuster an?
Nein, Bereiche sind keine Muster.
Cheatah
Hi,
Wie kann ich in einer
if()Anweisung den Inhalt einer Variable auf Zahlen von 0 bis einschließlich 20 Prüfen?indem Du 1.) dafür sorgst, dass es Zahlen _sind_ (also insbesondere keine Strings), 2.) prüfst, ob sie in dem Zahlenbereich liegen, und ggf. 3.) um eine Prüfung ergänzt, ob die Werte Deiner Definition von "Zahl" entsprechen. Dieser Punkt kann bereits bei 1.) geschehen sein.
Mit
preg_match()könnte es gehen, aber was gebe ich da als Suchmuster an?Nein, Bereiche sind keine Muster.
jein - ein bereich in einem beliebigen zahlensystem als string ausgedrückt kann man durchaus als muster intepretieren
allerdings ist ein regulärer ausdruck in diesem fall die kompliziertere variante
if zahl größer-gleich 0 und zahl kleiner-gleich 20
im vergleich zu
suche eine 1 bis 2-stellige ziffer die, wenn sie 1-stellig ist einen beliebigen wert haben kann und wenn sie 2-stellig ist an erster stelle nur 1 oder 2 beinhalten darf ;)
Hello,
indem Du 1.) dafür sorgst, dass es Zahlen _sind_ (also insbesondere keine Strings),
Er kann nur prüfen, ob der übermittelte String eine gültige Zahl repräsentiert. Und das muss er auch, wenn er 0 als gültige Eingabe zulassen will. Anderenfalls würde ein $zahl=intval($zahlstring) genügen mit anschließendem Rangecheck.
Um eine Prüfung per Muster kommt er also hier nicht herum.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

indem Du 1.) dafür sorgst, dass es Zahlen _sind_ (also insbesondere keine Strings),
Er kann nur prüfen, ob der übermittelte String eine gültige Zahl repräsentiert. Und das muss er auch, wenn er 0 als gültige Eingabe zulassen will. Anderenfalls würde ein $zahl=intval($zahlstring) genügen mit anschließendem Rangecheck.
Um eine Prüfung per Muster kommt er also hier nicht herum.
In perl kann ich auch ohne RE auskommen
if( index( join( '_', 0 .. 20 ), $test ) >= 0 ){ #tu was }
mfg Beat
Hallo Tom,
Um eine Prüfung per Muster kommt er also hier nicht herum.
Genau das mit den Mustern ist immer mein Problem!
Könntest du es mir freundlicherweise an einem Beispiel zu meinem Problem erläutern!?
Danke und Gruß aus dem tief verschneiten Thüringer Wald,
LSB
Genau das mit den Mustern ist immer mein Problem!
Könntest du es mir freundlicherweise an einem Beispiel zu meinem Problem erläutern!?
php verfügt über routinen zur musterprüfung, in deinem fall ist is_numeric() die schlauste wahl um zu prüfen ob das zu prüfende eine gültige zahl ist - wenn ds passiert ist, kommst du mit grundschul-mathematik weiter ...
Hi,
Um eine Prüfung per Muster kommt er also hier nicht herum.
Klar kann man das mit preg_match() machen, aber es gibt seit 4.3 standardmäßig ctype_digit(). Ich habe nur für ältere PHP-Versionen (meine Scripts laufen ab 4.1) noch eine eigene ctype_digit-Funktion, die dessen Funktionalität mittels preg_match() nachbildet ...
Gruß, Cybaer
Hallo Cybaer,
Klar kann man das mit preg_match() machen, aber es gibt seit 4.3 standardmäßig ctype_digit().
Danke, das war der entscheidende Hinweis.
Hab´s jetzt so:
if (!empty($MAPpart[0][2]) && ctype_digit($MAPpart[0][2]) && $MAPpart[0][2] >= 0 && $MAPpart[0][2] <= 20)...
Ist zwar ein wenig lang, aber Funktioniert!
Eventuell könnte man es ja noch etwas einkochen!?
Gruß
LSB
Ist zwar ein wenig lang, aber Funktioniert!
Eventuell könnte man es ja noch etwas einkochen!?
wie erwähnt würde ich eher zu is_numeric greifen, ctype_digit liefert zurück ob in einem string alle stellen eine dezimale ziffer sind
ctype_digit(1) liefert false ctype_digit('1') true
is_numeric(1) oder is_numeric('1') liefert true
das !empty kannst du dir ggf auch sparen, da is_nummeric ohnehin false liefert bei einem leerstring
Hallo suit,
wie erwähnt würde ich eher zu is_numeric greifen, ctype_digit liefert zurück ob in einem string alle stellen eine dezimale ziffer sind
Ja, aber is_numeric erlaubt auch . und , als Trennzeichen was ctype_digit ebenfalls mit herausfiltert:
ctype_digit(1,0) liefert false
is_numeric(1,0) liefert true
Da meine Werte aus einer ini Datei kommen, hat er scheinbar kein Problem mit nem vermeintlichen string und daher scheint mir ctype_digit vorteilhafter.
Gruß
LBS
Hello,
Ja, aber
is_numericerlaubt auch . und , als Trennzeichen wasctype_digitebenfalls mit herausfiltert:
ctype_digit(1,0)liefert false
is_numeric(1,0)liefert trueDa meine Werte aus einer ini Datei kommen, hat er scheinbar kein Problem mit nem vermeintlichen string und daher scheint mir
ctype_digitvorteilhafter.
Das kannst nur DU als Programmierer entscheiden, welche Funktion hier die passendere ist. Und eine Tipp möchte ich Dir ungefragt dazu noch geben: Dokumentiere die Entscheidung ausreichend. WEnn Du später mal das Programm verändern willst, sollte Die sofort klar werden, warum Du dich für welche Funktion entschieden hast.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Hello,
Um eine Prüfung per Muster kommt er also hier nicht herum.
Klar kann man das mit preg_match() machen, aber es gibt seit 4.3 standardmäßig ctype_digit(). Ich habe nur für ältere PHP-Versionen (meine Scripts laufen ab 4.1) noch eine eigene ctype_digit-Funktion, die dessen Funktionalität mittels preg_match() nachbildet ...
Ja, guter Tipp für die Überprüfung von positiven Ganzzahlen.
Ist aber eben leider nicht für Dezimalzahlen oder negative Zahlen geeignet. Überprüfung auf Muster heit nicht unbedingt, dass man regular Expressions nutzen muss. Man kann das auch ganz bodenständig lösen. Dass das dann aber noch sehr viel sparsamer ist, bezeweifele ich.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Hi suit!
suche eine 1 bis 2-stellige ziffer die, wenn sie 1-stellig ist einen beliebigen wert haben kann und wenn sie 2-stellig ist an erster stelle nur 1 oder 2 beinhalten darf ;)
Also 0 bis 29! Genau das, was der Fragesteller gesucht hat. =)
MfG H☼psel
Also 0 bis 29! Genau das, was der Fragesteller gesucht hat. =)
hossa, siehst du: dann wird der reguläre ausdruck gleich nochmal ein stückchen länger - also wieder ein grund mehr nicht für alles reguläre ausdrücke zu verwenden