Utilisation ucwords

t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   -  
 t671 -
Bonjour,

Dans un masque de saisie, j'inscrit des prénoms que je récupère pour remplir ma bd.
A la récupération, je met tout le champs prénom en minuscule :
$prenom = strtolower($prenom);
Puis, je met la première de chaque mot (prénom) en majuscule (car il peut y avoir 2,3,ou 4 prénoms) :
$prenoms = ucwords($prenom);
Le problème, c'est que s'il y a des prénoms composés (jean-pierre), jean prends bioen la majuscule, mais pas pierre, car il y a un trait d'union devant.
Comment mettre une majuscule après chaque trait d'union ?
Merci.

11 réponses

  1. t671
     
    Merci à vous tous .............
    J'ai une autre solution, plus simple :

    $prenom = str_replace ('-', '¿ ', $prenom); 
    $prenom = ucwords ($prenom);//Pour ceux qui à l'origine sont précédés par des '-'
    $prenom = str_replace ('¿ ', '-', $prenom); 
    1
  2. djflexlive Messages postés 577 Statut Membre 95
     
    Tu fais une syntaxe qui vérifies le tiret.
    Ensuites tu fais un str_replace du tiret par un espace, tu fais ton ucwords et tu str_replace le espace par tiret.
    0
  3. t671 Messages postés 1478 Date d'inscription   Statut Membre Dernière intervention   11
     
    Oui, mais je peux avoir plusieurs prénoms espacés par un espace, et certains prénoms avec un tiret (marie pauline marie-claire) !
    Je ne peux donc pas remplacer tous les espaces par un tiret ........
    0
  4. djflexlive Messages postés 577 Statut Membre 95
     
    Pourquoi plusieurs prénoms séparés par des espaces? Ce serait du genre le prénom principal et les prénoms secondaires?

    Dans ce cas là, pourquoi ne pas les séparer par des virgules au moment de l'insertion et faire le traitement en php de l'autre coté. C'est beaucoup plus simple non?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. t671
     
    C'est à dire placer les virgules à la saisie, ou placer les virgules à l'insertion dans la BD ?
    0
    1. djflexlive Messages postés 577 Statut Membre 95
       
      A la saisie (quoi que ca aurait aussi un interet dans la bd pour plus tard je penses éventuellement).
      0
  7. Pitet Messages postés 2845 Statut Membre 530
     
    Salut,

    Voici un exemple de solution :
    <?php
    
    function getUpperName($string) {
    	$stringLenght = strlen($string);
    
    	// on parcours les caractères de la chaine
    	for ($i = 0; $i < $stringLenght; $i++) {
    		// si le caractère courant est un tiret et qu'il existe un caractère suivant
    		if ($string[$i] == '-' && $i < $stringLenght - 1) {
    			// on transforme en majuscule le caractère suivant
    			$string[$i + 1] = strtoupper($string[$i + 1]);
    		}
    	}
    	
    	return ucwords($string);
    }
    
    echo getUpperName('marie-helene');
    echo '<br />';
    echo getUpperName('jean-pierre henri');
    
    ?>
    


    Bonne journée
    0
  8. t671
     
    Désole Pitet, mais ça ne fonctionne pas ! Ni la 1° partie, ni la 2° n'ont une majuscule .............
    0
  9. Pitet Messages postés 2845 Statut Membre 530
     
    Désolé t671 mais ce code fonctionne bien chez moi, et je ne comprend absolument pas pourquoi il ne fonctionne pas pour toi.
    0
  10. t671
     
    Voilà comment je l'ai adapté, mais ça ne fonctionne pas :
    function getUpperName($prenom) {
    	$stringLenght = strlen($prenom);
    
    	// on parcours les caractères de la chaine
    	for ($i = 0; $i < $stringLenght; $i++) {
    		// si le caractère courant est un tiret et qu'il existe un caractère suivant
    		if ($prenom[$i] == '-' && $i < $stringLenght - 1) {
    			// on transforme en majuscule le caractère suivant
    			$prenom[$i + 1] = strtoupper($prenom[$i + 1]);
    		}
    	}
    }
    

    J'ai peut-être oublié qqchose ????
    0
  11. djflexlive Messages postés 577 Statut Membre 95
     
    Massacre à la tronconneuse :O
    0
  12. Pitet Messages postés 2845 Statut Membre 530
     
    Il manque le return dans l'adaptation que tu as faite :

    return ucwords($prenom);


    Ça devrait marcher beaucoup mieux avec ceci :)
    0