RegExp.: erster Buchstabe groß
depp
- php
0 Dennis0 Candid Dauth0 Dennis0 depp0 Candid Dauth0 Dennis0 Candid Dauth0 Dennis
0 depp0 Dennis
moin
wie bekomm ich es gebacken, dass durch preg_replace jeweils der anfangsbuchstabe großgeschrieben wird, wenn dieser entweder der erste buchstabe des strings ist, oder einem trennzeichen nachfolgt. z.b. - _ / & usw...
danke für hilfe
Hi depp,
wie bekomm ich es gebacken, dass durch preg_replace jeweils der anfangsbuchstabe großgeschrieben wird, wenn dieser entweder der erste buchstabe des strings ist, oder einem trennzeichen nachfolgt. z.b. - _ / & usw...
Zum Umwandeln des Buchstaben in einen Großbuchstaben nutzt du die Funktion strtoupper(), damit du diese im zweiten Parameter von preg_replace nutzen kannst, musst du den Modifier e benutzen.
Theoretisch müsste das so in etwa gehen, habe es allerdings nicht getestet:
preg_replace("/([\-_\/ ][a-z])/e", "strtoupper($1)", $string);
MfG, Dennis.
Heißa, Dennis,
wenn dieser entweder der erste buchstabe des strings ist, oder einem trennzeichen nachfolgt. z.b. - _ / & usw...
preg_replace("/([\-_\/ ][a-z])/e", "strtoupper($1)", $string);
Du hast den Anfang vergessen:
preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1\')', $string;
Außerdem habe ich bei strtoupper die Anführungszeichen hinzugefügt, da er sonst afaik den Inhalt der Variable auszurühren versucht. Zumindest hatte ich neulich ein ähnliches Problem.
Den Backslash vor dem - habe ich auch weggemacht. Ich bin mir nicht sicher, ob das mit dem überhaupt funktioniert. Jedenfalls baut man einen Bindestrich in eckige Klammern ein, indem man ihn gleich an den Anfang schreibt. (Ich hoffe, ich habe da jetzt nicht etwas verwechselt)
Caramba!
Grüße aus Biberach Riss,
Candid Dauth (ehemals Dogfish)
Hi Candid,
Du hast den Anfang vergessen.
Stimmt, du hast Recht - wenn wir jetzt schon aber dabei sind, dann hast du auch den "Anfang" vergessen ;-)
$string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1\')', $string);
Außerdem habe ich bei strtoupper die Anführungszeichen hinzugefügt, da er sonst afaik den Inhalt der Variable auszurühren versucht.
Ich habe es dann jetzt doch gerade mal getestet - meine Version ohne Anfz. ergab:
Warning: Wrong parameter count for strtoupper()
Deine ist aber auch nicht das Wahre - bei einem String
$string = "es war einmal ein schöner tag";
wird lediglich ausgegeben:
s ar inmal in chöner ag
Du lässt nämlich $2 vollkommen wegfallen ;-)
Richtig wäre also:
$string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1$2\')', $string);
Den Backslash vor dem - habe ich auch weggemacht. Ich bin mir nicht sicher, ob das mit dem überhaupt funktioniert. Jedenfalls baut man einen Bindestrich in eckige Klammern ein, indem man ihn gleich an den Anfang schreibt. (Ich hoffe, ich habe da jetzt nicht etwas verwechselt)
Auch das habe ich gerade nochmal getestet:
$string = "es war einmal ein schöner tag -a";
$zeichenklasse = "[\-_\\/ ]";
//Ausgabe: Es War Einmal Ein Schöner Tag -A
$zeichenklasse = "[_\\/ \-]";
//Ausgabe: Es War Einmal Ein Schöner Tag -A
Funktioniert also beides ;-)
MfG, Dennis.
:-)
so klappts.
DANKE euch allen!
Heißa, Dennis,
Du lässt nämlich $2 vollkommen wegfallen ;-)
Stimmt. Am Anfang des Schreibens des Postings habe ich das noch bedacht, aber währenddessen habe ich wohl vergessen, fertigzudenken. ;-)
$string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1$2\')', $string);
Warum schließt du $1 in strtoupper ein?
Ich würde vorschlagen:
$string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', '\'$1\'.strtoupper(\'$2\')', $string);
Wenn das so weiter geht, müssen wir irgendwann einen Artikel drüber schreiben… ;-)
Caramba!
Grüße aus Biberach Riss,
Candid Dauth (ehemals Dogfish)
Hi Candid,
$string = preg_replace('/([-_\\/ ]|^)([a-z])/ei', 'strtoupper(\'$1$2\')', $string);
Warum schließt du $1 in strtoupper ein?
*gähn* Soll ich dich jetzt noch mal ganz frech bitten, das was du geschrieben hast noch mal zu überdenken? ;-)
$string = "hallo candid, geht das? ja/nein";
echo $string;
$string = preg_replace('/([_\\/ \-]|^)([a-z])/ei', 'strtoupper(\'$2\')', $string);
echo $string;
/* Ausgabe:
hallo candid, geht das? ja/nein
HalloCandid,GehtDas?JaNein
*/
MfG, Dennis.
Heißa, Dennis,
*gähn* Soll ich dich jetzt noch mal ganz frech bitten, das was du geschrieben hast noch mal zu überdenken? ;-)
$string = preg_replace('/([_\\/ \-]|^)([a-z])/ei', 'strtoupper(\'$2\')', $string);
Das habe ich nicht geschrieben. Zumindest nicht in dem Posting, auf das du geantwortet hast. :P
Ich habe $1 aus strtoupper herausgenommen, da es nur zusätzliche Rechenleistung verbraucht, das Trennzeichen (welches nicht aus Buchstaben besteht) in Großbuchstaben umzuwandeln. Zwar ist jene Leistung minimal, aber wir wollen ja global denken… ;-)
Deswegen steht in meinem (letzten) Code $1 außerhalb von strtoupper.
Caramba!
Grüße aus Biberach Riss,
Candid Dauth (ehemals Dogfish)
Hi Candid,
Deswegen steht in meinem (letzten) Code $1 außerhalb von strtoupper.
Hab ich wohl übersehen - Peinlich! ;-)
MfG, Dennis.
moin
erstmal danke. aber leider gehts noch nicht so ganz...
$string="abc def ghi";
...('/([-_\/ ]|^)([a-z])/ei', 'strtoupper('$1')', ...
=>bc ef hi
also nun sind die buchstaben ganz weg. so kann man seine probleme quasi beseitigen... das ist die notlösung ;-)
was stimmt noch nicht dran?
danke
Hi depp,
also nun sind die buchstaben ganz weg. so kann man seine probleme quasi beseitigen... das ist die notlösung ;-)
LOL - tja, das ist doch mal wirklich „produktiv” ;-)
was stimmt noch nicht dran?
Da muss ich wohl ein paar Millisekunden schneller gewesen sein als du, guckst du hier.
MfG, Dennis.