innerhalb Wort grosser Buchstabe ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
allerersten wort
alternativ code
auftretenden grossen buchstaben
augenblick
autofahrer
code
ersten wort
funktionieren
glauben
gross buchstaben
grosser buchstabe
letzten code
lieblingsspiel
output
spiel
string
testen
url
werfen
wort
-
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?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
<?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 -
Beim letzten Code wird vor dem ersten Wort ein Leerzeichen ausgegeben, die anderen beiden funktionieren.
fabo schrieb:
Ich nutze übrigens PHP-CLI. Damit muss ich den Code nur in ein Terminal kopieren, um ihn zu testen.
Aber ich glaube, dass das auch beim allerersten Wort ein Leerzeichen vorknallt. Ich kanns nur leider im Augenblick nicht testen. -
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
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage