Majuscule 1ere lettre Javascript

Résolu
Bonjour,

Je cherche une petite fonction qui me permettrait de détecter un espace et de mettre en majuscule la 1ere lettre de cahque mot.
Ex : BIENVENUE SUr le site.
Je voudrais avoir: Bienvenue Sur Le Site

Jai réussi à faire cela avec split() et substring() uppercase...
mais certain string ne contiennent que 2 mots, d'autre peuvent en avoir 5 etc...
Comment faire pour mettre chaque caractère dans un tableau puis mettre en majuscule la 1ere lettre ?

Merci de votre aide

4 réponses

  1. Contributeur
    Allez voilà une solution qui fonctionne, encapsulée dans une méthode.
    La méthode prend 2 paramètres :
    1/ un booléen qui vaut true si tu veux que la première lettre du texte soit également mise en majuscule ; false sinon.
    2/ le texte à convertir

    <script type="text/javascript">
    	function setMajToAllWords(toFirstWord, texte){
    		var newText = (toFirstWord == true) ? texte.charAt(0).toUpperCase() : texte.charAt(0);
    		for (var i=0 ; i<texte.length-1 ; i++){
    			if (texte.charAt(i).match(/\s/) && texte.charAt(i+1).match(/[a-z]/)){
    				newText += texte.charAt(i+1).toUpperCase();
    			} else {
    				newText += texte.charAt(i+1);
    			}
    		}
    		return newText;
    	}
    	
    	// Exemples
    	alert (setMajToAllWords(false, "bonjour a tous")); // Affiche "bonjour A Tous"
    	alert (setMajToAllWords(true, "bonjour a tous")); // Affiche "Bonjour A Tous"
    </script>

    1. Super !
      merci beaucoup Mihawk ;)
    2. Contributeur
      Au plaisir !
      Mets donc un +1 à la réponse histoire qu'elle s'affiche en évidence.
  2. Salut,

    Pour ceux qui cherchent la solution :

    texte = texte.replace(/\s([a-z])/g, function($1) {return $1.toUpperCase()});
    1. Contributeur
      Hello,

      On va faire plus simple avec les expression régulières...

      var texte = "bonjour a tous"
      texte = texte.replace(/\s([a-z])/, $1.toUpperCase());


      Je ne l'ai pas vérifié, à tester donc !
      1. merci pour ta réponse
        je vais tester et je reviens :)
      2. Contributeur
        J'ai testé, ça ne tourne pas.
        Je cherche une solution.
      3. oui en effet, $1 n'est pas reconnu
        merci pour ton aide
    2. Contributeur
      Bon bah zut j'y arrive pas... J'ai essayé ça :

      <script type="text/javascript"> 
       var texte = "bonjour a tous"; 
       texte = texte.replace(/\s([a-z])/g, " $1".toUpperCase()); 
       alert(texte); 
      </script>

      Je pensais vraiment que ça marcherait mais 'faut croire que le toUpperCase() dans un replace il n'aime pas :-/

      [EDIT] : en fait il aime bien, mais pas avec le $1 c'est assez étrange !

      Mihawk
      "The Weapon of Choice"