Erstes Zeichen (Zahl) in einem String prüfen ob 0
Markus Schlöder
- php
Sehr geehrte Damen und Herren,
in einem String existieren nur Zahlen.
Nun möchte ich das erste Zeichen, also die allererste Zahl, prüfen ob es sich hierbei um eine vorangestellte 0 handelt.
Beispiele:
$value = "1"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
$value = "10"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
$value = "10000000000000000000"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
$value = "12345000678900000000"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
$value = "01"; // Prüfung und Echo Ausgabe: False, vorangestellte 0 gefunden!
$value = "00000000010000000001"; // Prüfung und Echo Ausgabe: False, vorangestellte 0 gefunden!
Wäre für die suche auf das erste Zeichen die Funktion strpos richtig?
Beispiel:
if (strpos($_POST['string'], '0'))
{
echo "Keine Vorangestellte 0 gefunden!";
}
else
{
echo "Vorangestellte 0 gefunden!";
}
Oder habt Ihr eine andere Empfehlung?
Vielen Dank für Ihre Hilfe!
Hallo,
Sehr geehrte Damen und Herren,
du liebe Güte, warum so förmlich?
in einem String existieren nur Zahlen.
Zahlen oder Ziffern?
Nun möchte ich das erste Zeichen, also die allererste Zahl, prüfen ob es sich hierbei um eine vorangestellte 0 handelt.
Ist das die ganze Anforderung? Abfragen, ob das erste Zeichen eines String die Ziffer 0 ist?
Beispiele:
"1"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
"10"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
"10000000000000000000"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
"12345000678900000000"; // Prüfung und Echo Ausgabe: True, keine vorangestellte 0 gefunden!
"01"; // Prüfung und Echo Ausgabe: False, vorangestellte 0 gefunden!
"00000000010000000001"; // Prüfung und Echo Ausgabe: False, vorangestellte 0 gefunden!
Okay, also abfragen, ob das erste Zeichen NICHT die Ziffer 0 ist.
Wäre für die suche auf das erste Zeichen die Funktion strpos richtig?
Eigentlich nicht. Damit fragst du ab, ob ein bestimmtes Zeichen überhaupt im String vorkommt, und wenn ja, an welcher Stelle. Es geht viel einfacher - PHP kann auf Strings auch wie auf ein Array zugreifen, die einzelnen Zeichen im String sind dann quasi die Arrayelemente. Also:
if ($string[0]!='0')
{ echo 'keine vorangestellte Null';
}
Die Abfrage ist allerdings "stur", d.h. wenn der String mit einem Leerzeichen beginnt und dann erst die führende Null folgt, wird das als "keine führende Null" erkannt.
So long,
Martin
Hallo Martin,
erst einmal vielen Dank für die Erklärung!
Leider muss ich jetzt Arbeiten, also schaue ich mir Dein Beispiel erst morgen in ruhe an!
Gruß,
Markus S.
Hi!
Die Abfrage ist allerdings "stur", d.h. wenn der String mit einem Leerzeichen beginnt und dann erst die führende Null folgt, wird das als "keine führende Null" erkannt.
Wenn man Strings mit nicht benötigten Leerzeichen am Anfang oder Ende oder beiden erwartet kann man sich mit den Trim-Funktionen helfen: trim(), ltrim() und rtrim(). (Mit denen bekommt man nicht nur Whitespace weg sondern auch beliebige selbst festgelegte Zeichen.)
Lo!
Moin!
Es geht viel einfacher - PHP kann auf Strings auch wie auf ein Array zugreifen, die einzelnen Zeichen im String sind dann quasi die Arrayelemente.
Stimmt zwar, ist aber keine sehr gute Idee. PHP greift damit nur auf das erste Byte des Strings zu, in der Regel will man aber das Encoding des Strings, den man da untersucht, mit berücksichtigen. Also: Stringfunktionen nehmen, gerne auch direkt die Multibyte-Versionen. Und wenn noch nicht jetzt, hat man später immer die Chance, durch Suchen nach den Stringfunktionen alle Stellen zu finden, die man umwandeln muss.
- Sven Rautenberg
Hi!
Es geht viel einfacher - PHP kann auf Strings auch wie auf ein Array zugreifen, die einzelnen Zeichen im String sind dann quasi die Arrayelemente.
Stimmt zwar, ist aber keine sehr gute Idee. PHP greift damit nur auf das erste Byte des Strings zu, in der Regel will man aber das Encoding des Strings, den man da untersucht, mit berücksichtigen.
Das ist zwar formal korrekt, aber im Falle des OP etwas übers Ziel hinausgeschossen. Er will auf das Zeichen 0 an erster Stelle prüfen, und das ist in allen relevanten Kodierungen immer der selbe Bytewert. Gemäß dem YAGNI-Prinzip würde ich jetzt nicht auf eine generelle Multibyte-Lösung setzen, solange dazu kein Bedarf gegeben ist.
Lo!
Moin!
Es geht viel einfacher - PHP kann auf Strings auch wie auf ein Array zugreifen, die einzelnen Zeichen im String sind dann quasi die Arrayelemente.
Stimmt zwar, ist aber keine sehr gute Idee. PHP greift damit nur auf das erste Byte des Strings zu, in der Regel will man aber das Encoding des Strings, den man da untersucht, mit berücksichtigen.
Das ist zwar formal korrekt, aber im Falle des OP etwas übers Ziel hinausgeschossen. Er will auf das Zeichen 0 an erster Stelle prüfen, und das ist in allen relevanten Kodierungen immer der selbe Bytewert. Gemäß dem YAGNI-Prinzip würde ich jetzt nicht auf eine generelle Multibyte-Lösung setzen, solange dazu kein Bedarf gegeben ist.
Der Array-Zugriff erfordert aber eine Abfrage mit isset(), denn kürzere Strings würden sonst Notices auswerfen. Wenn aber sowieso eine Funktion aufgerufen werden muss, kann man auch direkt eine Stringfunktion nehmen.
- Sven Rautenberg
Grüße,
rein vom prinzip her
soweit ich mich errinere erlaubt PHP diese variablentypspielerei
MFG
bleicher
Hallo Martin,
du liebe Güte, warum so förmlich?
Fast jede/r Fragesteller/in schreibt in Foren; Hallo, Hallo Forum, Hallo Ihr da oder Hallo Experten. Da habe ich mir mal gedacht eine förmliche Anrede anzuwenden damit es nicht so einseitig aussieht! ;-)
»»... Es geht viel einfacher - PHP kann auf Strings auch wie auf ein Array zugreifen, die einzelnen Zeichen im String sind dann quasi die Arrayelemente. Also:
if ($string[0]!='0')
{ echo 'keine vorangestellte Null';
}
»»
Wieder was Neues gelernt, das wusste ich vorher nicht.
> Die Abfrage ist allerdings "stur", d.h. wenn der String mit einem Leerzeichen beginnt und dann erst die führende Null folgt, wird das als "keine führende Null" erkannt.
Für diesen fall hat dedlfix erläutert trim() oder ltrim() anzuwenden, ich aber bevorzuge lieber die ctype\_digit Anwendung, da in meinem String nur Ziffern von 0 – 9 erlaubt sind.
Erst nach dieser Anwendung wird nach einer vorangestellten 0 gesucht.
Vielen Dank für Deine wertvollen Informationen und Beispiele!
Hiermit bin ich ein sehr großes Stück weitergekommen und habe noch was gelernt dabei.
Auch ein Dankeschön an bleicher, Sven Rautenberg und dedlfix für die Tipps!
Viele Grüße,
Markus