funktion preg_match() überprüfen auf Zahlen
Patrick Schröder
- php
0 Kim0 Michael Wronna0 lulu0 Patrick Schröder
Hallo Ihr!
Ich muss euch heute leider mal mit einem Problem nerven, dass ansich recht simpel ist.
Ich möchte gern einen String überprüfen, ob er tatsächlich nur aus Zahlen (0 - 9) besteht. Ich habe herausgefunden, dass die Funktion preg_match() dafür passig ist.
Im Forumsarchiv kann man derzeit leider nicht schauen, da der Server ausgelastet ist und die Beschreibung auf php.net ist auch in der deutschen Anleitung auf englisch. Mein Englisch ist bedingt tauglich, aber durch die Vielzahl der Möglichkeiten, usw. blicke ich da leider nicht durch.
Über Google habe ich außer im Forumsarchiv, welches ja leider grad dicht ist, auch nichts anderes (besseres gefunden).
Von daher verzeiht mir bitte das "nochmalige Posten" eines schon vorhandenen Themas. Kann mir jemand helfen?
Gruß Patrick
Benutze lieber settype und versuch einfach, den Typ Deiner Variable von String auf Integer (oder Double) zu casten, wenn das erfolgreich war (== true), lag in Deinem String eine dem Typ entsprechende gültige Zahl, ansonsten eben nicht (== false).
http://de.php.net/manual/de/function.settype.php
Gruß,
Kim
Hallo Kim,
ansich passt dein Tipp schon, nur kann es auch vorkommen, dass dieser String z.B. "0005" heißt. Würden bei der Typzuweisung "integer" nicht die ersten Nullen verloren gehen?
Bin mir da grad nicht sicher, aber der integer-Wert von "0005" müsste ja eigentlich 5 sein, oder?
Gruß Patrick
Yepp, das hättest Du dann aber auch schreiben müssen, kann ich ja nicht aus dem Posting ahnen ;-)
Hast jetzt ja noch andere Antworten bekommen, die Dir helfen.
Ich würde es aber trotzdem mit settype machen, danach die Länge des Strings prüfen und voran die entpsrechenden Nullen hängen :-)
Ich denke, das ist dann ganz unkompliziert.
Gruß,
Kim
Hallo Kim,
ansich passt dein Tipp schon, nur kann es auch vorkommen, dass dieser String z.B. "0005" heißt. Würden bei der Typzuweisung "integer" nicht die ersten Nullen verloren gehen?
Bin mir da grad nicht sicher, aber der integer-Wert von "0005" müsste ja eigentlich 5 sein, oder?
Gruß Patrick
Hallo!
Benutze lieber settype und versuch einfach, den Typ Deiner Variable von String auf Integer (oder Double) zu casten, wenn das erfolgreich war (== true), lag in Deinem String eine dem Typ entsprechende gültige Zahl, ansonsten eben nicht (== false).
Das halte ich für keine gute Idee. Die Funktion gibt nicht FALSE zurück wenn in der Variable andere Zeichen als Zahlen sind, sondern macht daraus ne Zahl. Hast Du mal die Kommentare zu settype() gelesen?
Zur Umwandlung von Strings in Zahlen siehe: http://de3.php.net/manual/de/language.types.string.php#language.types.string.conversion
(lässt sich zwar hier nicht zu 100% anwenden, aber es geht in die Richtung)
Ja, Du hast mit Sicherheit am Ende ne Zahl, aber Du wirst nicht merken wenn da was nicht stimmt. Wenn Du Buchstaben im String hast, dann ist die Zahl die am Ende dabei rauskommt mit Sicherheit Quatsch, weil es schon vorher irgendeinen Fehler oder einen Manipulationsversuch gegeben haben muss. Und aus diesem Grund würde ich das lieber per regExp oder is_numeric() prüfen und ggfs. auf einen Fehler direkt reagieren.
(Links setzen: </faq/#Q-19>)
Grüße
Andreas
hallo patrick,
eine ziffer kann in regulaeren ausdruecken durch \d
angesprochen werden. vielleicht hilft dir das weiter.
http://de.php.net/manual/de/pcre.pattern.syntax.php
gruss vom bodensee,
michael
Huhu Patrick
Ich möchte gern einen String überprüfen, ob er tatsächlich nur aus Zahlen (0 - 9) besteht. Ich habe herausgefunden, dass die Funktion preg_match() dafür passig ist.
Um eine Zahl zu matchen kannst Du eine "character class" verwenden
z.B. so
[0-9]
oder auch
\d
Für eine Folge von Zahlen brauchst Du dann noch einen "quantifier"
z.B.
+
oder
*
Um den gesamten String zu prüfen kannst Du Anfang "^" und Ende "$" des Strings in das Pattern aufnehmen.
Eine denkbare Lösung wäre also z.B.:
[1]+$
Detailinformationen dazu findest Du hier
http://de2.php.net/manual/en/pcre.pattern.syntax.php
Viele Grüße
lulu
0-9 ↩︎
Zum eindeutigen Verständnis hatte ich evtl. noch was vergessen...
Die Zahlen-Strings können z.B. so aussehen:
00005
01002
00553
34005
die Nullen am Anfang sollten nach Möglichkeit dabei nicht wegfallen. Natürlich könnte man sie hinterher wieder anfügen, wäre aber nicht unbedingt so schick.
Trotzdem schonmal soweit ein danke an alle Helfenden ;-)
Gruß Patrick
hallo patrick,
in perl geht das etwas so:
if ( $Wert !~ /\d{5}$/ ) { mach_sonst_was ; }
also dann vielleciht in php:
if ( ! preg_match ( "/\d{5}/", $Wert ) { mach_sonst_was ; }
ist aber ungetestet. erneuter gruss,
michael
Hallo Patrick,
Die Zahlen-Strings können z.B. so aussehen:
00005
01002
00553
34005
Wenn es dir nur darum geht, zu prüfen, ob der String eine Zahl ist, würde ich dir is_numeri() (http://www.php.net/manual/de/function.is-numeric.php) empfehlen. Wenn aber auch die Länge relevant ist, wirst du um reguläre Ausdrücke nicht herumkommen:
$numeric = preg_match('/^\d{5}$/', $var);
Schöne Grüße,
Johannes