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 à l'essai
    Inscrit en
    Juillet 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 22
    Points : 16
    Points
    16
    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 averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    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
    Points : 20 778
    Points
    20 778
    Par défaut
    Ou tout simplement utiliser la fonction php : ucfirst qui le fait déjà pour toi

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

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    C'est donc ucwords
    qui te permetrat ceci

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

    Informations forums :
    Inscription : Août 2006
    Messages : 379
    Points : 422
    Points
    422
    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 confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 466
    Points : 632
    Points
    632
    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
    Expert éminent sénior

    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
    Points : 17 777
    Points
    17 777
    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 à l'essai
    Inscrit en
    Juillet 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Hum presque...
    Ca me renvoit : BréAl-sous-Montfort

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 22
    Points : 16
    Points
    16
    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, 11h22
  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, 01h19
  3. Réponses: 7
    Dernier message: 21/10/2010, 14h30
  4. [RegEx] mettre en majuscule chaque mot d'une chaine
    Par bigs3232 dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2010, 10h48

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