kostenloser Webspace werbefrei: lima-city


innerhalb Wort grosser Buchstabe ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    uhrinfo

    uhrinfo hat kostenlosen Webspace.

    Hallo

    wie kann ich prüfen, on innerhalb eines Wortes ein grosser Buchstabe ist
    also z.B.:

    $string = "Mein LieblinsSpiel ist DosenWerfen und nicht Dart";

    wenn dieser Fall eintritt, will ich vor den auftretenden grossen Buchstaben ein Leerzeichen

    $string = "Mein Lieblins Spiel ist Dosen Werfen und nicht Dart";

    aber wiemache ich das am besten?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. b*********t

    Ungetestet:
    <?php
         $word = "FooBar";
         $wordwithoutfirstletter = substr($word, 1, strlen($word));
         if(preg_match("[A-Z]", $wordwithoutfirstletter)) {
              $wordwithoutfirstletter = lowercase($wordwithoutfirstletter);
         }
         $word = substr($word, 0, 1) . $wordwithoutfirstletter;
         echo $word;
    ?>


    Sollte gehen.
  4. <?php
    $string = 'Mein LieblignsSpiel ist DosenWerfen und nicht Dart';
    $spaced = preg_replace('/([A-Z])/', ' $1', $string);
    echo $spaced;
    ?>


    Oder ohne Regex:

    <?php
    function spaced($string) {
        $output = '';
        
        foreach(str_split($string) as $char) {
            strtoupper( $char ) == $char and $output and $output .= ' ';
            $output .= $char;
        }
        
        return $output;
    }
    
    echo spaced('Mein LieblingsSpiel ist DosenWerfen und nicht Dart');
    ?>


    Ungetestet, sollte aber funktionieren.

    EDIT:

    Der Code im Forum verursacht, dass vor jedem Wort, das nicht vorher Bestandteil eines anderen Wortes war, zwei Leerzeichen stehen.


    Danke drafed_map :)

    Dann versuchen wir es anders...

    <?php
    $string = 'Mein LieblingsSpiel ist DosenWerfen und nicht Dart';
    $spaced = preg_replace('/(\p{Ll})(\p{Lu})/u', '\1 \2', $string);
    echo $spaced;
    ?>


    Alternativ:

    <?php
    $string = 'Mein LieblingsSpiel ist DosenWerfen und nicht Dart';
    $spaced = preg_replace('/\p{Lu}(?<=\p{L}\p{Lu})/u', ' \0', $string);
    echo $spaced;
    ?>


    Es würde auch so gehen:

    <?php
    $string = 'Mein LieblingsSpiel ist DosenWerfen und nicht Dart';
    $spaced = preg_replace('/ *([A-Z])/', ' $1', $string);
    echo $spaced;
    ?>


    Aber ich glaube, dass das auch beim allerersten Wort ein Leerzeichen vorknallt. Ich kanns nur leider im Augenblick nicht testen.

    Beitrag zuletzt geändert: 7.10.2011 20:04:32 von fabo
  5. Beim letzten Code wird vor dem ersten Wort ein Leerzeichen ausgegeben, die anderen beiden funktionieren.


    fabo schrieb:
    Aber ich glaube, dass das auch beim allerersten Wort ein Leerzeichen vorknallt. Ich kanns nur leider im Augenblick nicht testen.
    Ich nutze übrigens PHP-CLI. Damit muss ich den Code nur in ein Terminal kopieren, um ihn zu testen.
  6. Hallo

    aber was passiert wenn ein Wort nur aus Gross-Buchstaben besteht

    Bsp: $string = "ich bin AutoFahrer eines BMW aber und meineFrau fährt VW lieber";

    dann hat man B M W und V W auseinander geschrieben
    also bräuchte man eine Regel, die nicht greift, wenn mind 2 Großbuchstaben aufeinander folgen
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!