Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2007, 15h59   #1
Invité de passage
 
Inscription : juillet 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 22
Points : 3
Points : 3
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 !
Guilhem_mdg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 16h02   #2
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
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 :
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à.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 19h03   #3
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Ou tout simplement utiliser la fonction php : ucfirst qui le fait déjà pour toi
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 19h59   #4
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
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.
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 20h18   #5
Membre expérimenté
 
Inscription : janvier 2007
Messages : 439
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 439
Points : 519
Points : 519
Lol

C'est donc ucwords
qui te permetrat ceci
spawntux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 20h19   #6
Membre éclairé
 
Inscription : août 2006
Messages : 379
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : août 2006
Messages : 379
Points : 383
Points : 383
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
SpiritOfDoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 20h24   #7
Membre expérimenté
 
Inscription : janvier 2007
Messages : 439
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 439
Points : 519
Points : 519
Lol oui tu as raison je n'avais pas vu ces satané - ^^ donc je pense que ta solution est la bonne egalement ^^
merci

Cordialement
spawntux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2007, 21h24   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Code :
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2007, 08h59   #9
Invité de passage
 
Inscription : juillet 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 22
Points : 3
Points : 3
Hum presque...
Ca me renvoit : BréAl-sous-Montfort
Guilhem_mdg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2007, 10h33   #10
Invité de passage
 
Inscription : juillet 2003
Messages : 22
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 22
Points : 3
Points : 3
Je crois avoir fait ma fonction. Qu'en pensez-vous ?
Code :
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;
}
Guilhem_mdg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h32.


 
 
 
 
Partenaires

Hébergement Web