[PHP] Mettre en majuscule la première lettre

Bon en PHP mettre en majuscule la première lettre de tous les mots, c’est facile, ya ucwords pour ca.
le problème c’est que ca ne marche pas pour les noms composés avec un tiret, et comme je suis une bille en regexp, j’y arrive pas >_<.
Ya pas un as des regexp qui pourrait me dire comment simplement transofrmer ca :

jean-philippe truc
en
Jean-Philippe Truc

Merci les jeunes ^^

Tu peux pas simplement rechercher les lettres après les - _ et les remplacer par l’équivalent en majuscule ?

ben si mais comment, en parcourant toute la chaine de caractères ? C’est pas super efficace je penses, ca doit être plus rapide avec un regexp ?!

eeeuhhh …
preg de recherche > /[\w]±([\w]{1})/
preg de replace > eeuhhh … /ucwords($1)/e ? (pas sur du tout, mais alors vraiment pas du tout, normalement le e permet de rajouter du code PHP dans l’évaluation de la regexp > ‘enables evaluation of replacement as PHP code’) :neutre:

c pas test, mais c’est fait en suivant le PCRE Cheat Sheet :jap:

Ce message n’était pas conforme aux règles d’utilisation du nouveau forum :

:smiley:

Merci, mais j’arrive pas à le faire marcher >_< (quand je dis que je suis une bille en regexp c’est pas pour rien :o)

si je fais ca :


$string = "jean-philippe truc";
$pattern = "/[\w]+-([\w]{1})/";
$replace = "/ucwords($1)/e";
echo preg_replace($pattern, $replace, $string);

ca me renvoi :
hilippe Truc

raté Kiss.

$pattern = "/\b([\w]+)(?:-([\w]{1}))?\b/e";
$replace = "ucfirst('$1') . '-' . ucfirst('$2')";

Et c’est bof. En pondant ton propre algorithme ça serait bien plus propre (j’aime pas l’option /e de PCRE).

(et surtout je vois pas comment avec ucwords vous arrivez à ne modifier que la première lettre…)