Markus Schlöder: Erstes Zeichen (Zahl) in einem String prüfen ob 0

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!

  1. 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

    --
    Der Stress von heute ist die gute alte Zeit von morgen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. 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.

    2. 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!

    3. 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

      1. 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!

        1. 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

    4. Grüße,
      rein vom prinzip her

      • man könnte auch überprüfen ob logarithmus zur basis 10 kleiner ist als
        stringlänge
        -man könnte überprüfen ob die stringlänge größer ist als die stringlänge vom gleichen*1

      soweit ich mich errinere erlaubt PHP diese variablentypspielerei

      MFG
      bleicher

      --
      __________________________-

      FirefoxMyth
    5. 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