IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Mettre des majuscules au début de chaque mot [FAQ]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 22
    Par défaut Mettre des majuscules au début de chaque mot
    Bonjour,
    Je souhaite créer une fonction qui mette des majuscules au début de chaque mot composé envoyé en paramètre.
    Ex : function maFonction('Bréal-sous-montfort') doit renvoyé "Bréal-sous-Montfort"

    Comment faire ? (en PHP et avec les regex)
    Merci de votre aide !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Par défaut
    Tu peux faire un explode au niveau des - et à chaque mots que tu récupères ajouter un ucfirst().

    Le problème c'est que ça va te marqué : Truc-Sous-Machin et non Truc-sous-Machin.

    P.s : Je ne vois pas comment faire ça avec des ReGex.

    [EDIT] : Tu peux aussi faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $message = 'test-test2-test3';
    $message = str_replace('-', ' ', $message); 
    $message = ucwords($message);
    $message = str_replace(' ', '-', $message);
    C'est pas super propre, mais l'idée est là.

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Ou tout simplement utiliser la fonction php : ucfirst qui le fait déjà pour toi

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Par défaut
    Citation Envoyé par Kerod
    Ou tout simplement utiliser la fonction php : ucfirst qui le fait déjà pour toi
    Ba non .

    Elle met la première ... Car une chaine du type : test-test1-test2-[...] n'est considéré que comme un seul et unique mot.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 466
    Par défaut
    Lol

    C'est donc ucwords
    qui te permetrat ceci

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Par défaut
    Citation Envoyé par spawntux
    Lol

    C'est donc ucwords
    qui te permetrat ceci
    Non plus :'), et pour la même raison qu'évoqué plus haut

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 466
    Par défaut
    Lol oui tu as raison je n'avais pas vu ces satané - ^^ donc je pense que ta solution est la bonne egalement ^^
    merci

    Cordialement

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $string = 'Bréal-sous-montfort';
    echo preg_replace('#\b(?!sur\b|sous\b)(\w+)\b#e', "ucfirst('$1')", $string);

    Une assertion négative avant pour supprimer les mots comme sur et sous. Le flag e pour faire interpréter le code PHP (limité) de son deuxième paramètre (la fonction ucfirst).


    Julp.

  9. #9
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 22
    Par défaut
    Hum presque...
    Ca me renvoit : BréAl-sous-Montfort

  10. #10
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 22
    Par défaut
    Je crois avoir fait ma fonction. Qu'en pensez-vous ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    // Met la 1ère lettre des villes composées
    function _ucwords($texte){
     
    	$texte=strtolower($texte);
    	$texte = ucwords($texte);
     
    	// Espace
    	$chaineRecomposee="";
    	$tab=explode(" ",$texte);
    	for($i=0;$i<count($tab);$i++){
    		if($i==0) $chaineRecomposee=ucfirst($tab[$i]);
    		else $chaineRecomposee=$chaineRecomposee." ".ucfirst($tab[$i]);
    	}
    	// Tiret
    	$texte=$chaineRecomposee;
    	$chaineRecomposee="";
    	$tab=explode("-",$texte);
    	for($i=0;$i<count($tab);$i++){
    		if($i==0) $chaineRecomposee=ucfirst($tab[$i]);
    		else $chaineRecomposee=$chaineRecomposee."-".ucfirst($tab[$i]);
    	}
     
    	// Apostrophe
    	$texte=$chaineRecomposee;
    	$chaineRecomposee="";
    	$tab=explode("'",$texte);
    	for($i=0;$i<count($tab);$i++){
    		if($i==0) $chaineRecomposee=ucfirst($tab[$i]);
    		else $chaineRecomposee=$chaineRecomposee."'".ucfirst($tab[$i]);
    	}
     
    	// Mots spéciaux de jonction
    	$texte = preg_replace('`([- ])Au([- ])`', '$1au$2', $texte);
    	$texte = preg_replace('`([- ])A([- ])`', '$1à$2', $texte);
    	$texte = preg_replace('`([- ])Le([- ])`', '$1le$2', $texte);
    	$texte = preg_replace('`([- ])La([- ])`', '$1la$2', $texte);
    	$texte = preg_replace('`([- ])Les([- ])`', '$1les$2', $texte);
    	$texte = preg_replace('`([- ])De([- ])`', '$1de$2', $texte);
    	$texte = preg_replace('`([- ])Du([- ])`', '$1du$2', $texte);
    	$texte = preg_replace('`([- ])Des([- ])`', '$1des$2', $texte);
    	$texte = preg_replace('`([- ])Sous([- ])`', '$1sous$2', $texte);
    	$texte = preg_replace('`([- ])Sur([- ])`', '$1sur$2', $texte);
    	$texte = preg_replace('`([- ])Et([- ])`', '$1et$2', $texte);
    	$texte = preg_replace('`([- ])Es([- ])`', '$1es$2', $texte);
    	$texte = preg_replace('`([- ])Lez([- ])`', '$1lez$2', $texte);
    	$texte = preg_replace('`([- ])L\'([- ])`', '$1l\'$2', $texte);
    	$texte = preg_replace('`([- ])D\'([- ])`', '$1d\'$2', $texte);
     
    	return $texte;
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/06/2014, 10h22
  2. Majuscule au début de chaque mot SAUF certains
    Par fafa44 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/03/2014, 00h19
  3. Réponses: 7
    Dernier message: 21/10/2010, 13h30
  4. [RegEx] mettre en majuscule chaque mot d'une chaine
    Par bigs3232 dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2010, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo