Wolfi: Php Stringoperationen

Hallo

ich finde irgendwie keine Antwort im Netz.

Ich hoffe mir kann jemand weiterhelfen:

In meinem Php script habe ich eine $Zeichenkette
und will testen, ob das letzte Zeichen dieser Kette eine Zahl ist...

und wenn dem so ist dann soll sie abegeschnitten werden.

Ich habe das jetzt so geschrieben.
Problem: 1. Es funktioniert nicht    2. wie kann man es eleganter lösen?

$Zeichenkette = substr($show, 0, (strlen($c)-1));
//Zusatz: falls z.b. planta 10 dann auch noch 1 abschneiden
$test = substr($show, (strlen($Zeichenkette)-1), strlen($Zeichenkette));

if($test == 1){  //Test ob das letzte Zeichen von Zeichenkette eine Zahl -hier 1 - ist
$Zeichenkette = substr($show, 0, (strlen($Zeichenkette)-1));

}

  1. yo,

    ich finde irgendwie keine Antwort im Netz.

    http://www.php.net/manual/de/function.is-numeric.php

    Ilja

    1. echo $begrüßung;

      http://www.php.net/manual/de/function.is-numeric.php

      Dem schließe ich mich an, ein Regulärer Ausdruck scheint mit übertrieben.
      Außerdem gibt es noch die Character Type Functions.

      Um das letzte Zeichen einer Zeichenkette zu ermitteln, ... substr() lässt sich auch mit einem negativen Start-Parameter füttern.

      echo "$verabschiedung $name";

  2. Lieber Wolfi,

    für Dein Problem bietet sich der Einsatz regulärer Ausdrücke an.

    Dazu findest Du ein umfangreiches Kapitel in der PHP-Doku zu den ganzen preg_xyz()-Funktionen.

    Mein Lösungsvorschlag sieht so aus (ein echter Einzeiler):

    $korrigierte_Zeichenkette = preg_replace('~\d*$~', '', $Zeichenkette);

    Zur Erklärung: Reguläre Ausdrücke verwenden eine Syntax, um Muster in Zeichenketten zu beschreiben. Dazu gibt es ein Meta-Zeichen, das aus einem Backslash und einem kleinen d besteht: "\d". Es bedeutet "eine Ziffer". Wenn auf ein Zeichen ein Asterisk ("*") folgt, dann heißt das "beliebig viele davon - auch keine". Die Kombination "\d*" bedeutet also "beliebig viele Ziffern - wenn es sein muss auch keine". Das Dollarzeichen bedeutet "hier ist das Stringende". Damit habe ich "\d*$", also "beliebig viele (auch keine) Ziffern vor dem Stringende".

    Die preg_-Funktionen verwenden alle als erstes Argument einen String, in dem das Suchmuster zwischen zwei identischen Zeichen (ich habe oben die Tilde ("~") verwendet, klassisch wäre - wie auch in Javascript - der Slash) stehen muss. Daher steht da oben ~\d*$~ was natürlich auch in Anführungszeichen gesetzt sein muss, also '~\d*$~'. Als zweites Argument für preg_replace (also eine Ersetzungsfunktion) steht die Ersatz-Zeichenkette, in unserem Fall ein leerer String. Das dritte Argument schließlich bezeichnet die Zeichenkette, auf die das Suchmuster (der reguläre Ausdruck) passen soll, damit die Ersetzung vorgenommen und als Rückgabewert der Funktion ausgegeben werden kann.

    Die preg_replace()-Funktion ersetzt nur, wenn das Suchmuster passt. Passt es nicht, so tut sie nichts. Daher finde ich sie enorm praktisch. Daher lohnt es sich für Dich, diese Sache mit den regulären Ausdrücken (und den Funktionen, die sie nutzen) in Zukunft etwas zu studieren, da sie das Arbeiten mit Strings sowas von enorm erleichtern können!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

  3. Hi,

    und will testen, ob das letzte Zeichen dieser Kette eine Zahl ist...

    Vielleicht mit einem regulären Ausdruck und preg_replace?

    $new =  preg_replace("/^(.+)[0-9]$/i", "\1", $alt);

    ungetested...

    Gruesse, Joachim

    --
    Am Ende wird alles gut.