var m=pif.charAt(0).toUpperCase() + pif.substring(1).toLowerCase();
En revanche si l'on rentre "jean claude" ou "jean-claude" cela ne me met en
majuscule que la premiere lettre et, vous vous en doutez, j'aimerais avoir
"Jean Claude" ou "Jean-Claude" voire même un "-" remplacant l'espace de
"Jean Claude"
N'etant pas dev en javascript je sollicite votre aide bienveillante
Merci d'avance
Serge
Connaissant le nom de la fonction qui fait ça en PHP, ucwords, je n'ai
pas eu trop de mal à trouver grâce à Google :
http://www.google.fr/search?q=ucwords+javascript
Par exemple ici :
http://www.thescripts.com/forum/thread92239.html
<cit.>
String.prototype.ucwords = function(){
return this.replace(/\b\w/gi, function(c,i,s) { return
c.toUpperCase(); });
}
</cit.>
Tu l'utiliseras après comme ceci :
var m = pif.toLowerCase().ucwords();
Attention cependant, je ne sais pas comment les fonctions JavaScript et
les \b et \w réagissent aux lettres accentuées. Il faudrait faire gaffe
que « élodie » donne « Élodie » plutôt que « éLodie », que « DAPHNÉ »
donne « Daphné » plutôt que « DaphnÉ », et que « Bénédicte » ne donne
pas « BéNéDicte ».
Le 12/02/2008 10:59, Serge Hipontoise a écrit :
>
> [...] j'aimerais avoir "Jean Claude" ou "Jean-Claude" voire même
> un "-" remplacant l'espace de "Jean Claude"
En l'occurrence, je crois qu'il vaut mieux s'abstenir. Je connais un
« Jean Charles » qui tient à l'écriture sans trait d'union, car (dit-il)
il s'agit des deux prénoms Jean et Charles plutôt que du prénom composé
Jean-Charles.
Et les CSS ? à quoi servent les CSS ? ;-)
<input style="text-transform: capitalize">
Sinon, un peu laborieux
(et qui n'a pas de blème avec les accents dans mon Fx) :
function nomPropre(strg) {
strg = strg.replace(/ /g,'-');
strg = strg.split('-');
for (var i=0; i<strg.length; i++)
strg[i] = strg[i].charAt(0).toUpperCase() +
strg[i].substring(1).toLowerCase();
strg = strg.join('-');
if(strg.indexOf('-')==0) strg = strg.substring(1);
return strg;
}
<input onchange="this.value=nomPropre(this.value);">
Les blancs après le nom n'ont pas été résolus, non plus que les doubles
espaces.
(les fôtes de frappe non plus)
--
sm
Les espaces devant et derrieres sont deja gérés
Merci SAM pour ton code qui marche amerveille !
Ceci dit... Je note la remarque d'Olivier et je me demandais si je pouvais
abuser, SAM, en te demandant ce que ca donnerait en respectant l'espace du
milieu s'il est présent ? C'est a dire si la sépâration est un tiret on la
garde et si c'est un espace aussi, mais on passe bien tous les prénoms en
majuscules
Un grand merci d'avance
Serge
Je ne comprends rien aux expressions régulières ...
à tel point que je n'arrive pas à faire fonctionner le pré-mâché :
http://www.thescripts.com/forum/thread92239.html
<cit.>
String.prototype.ucwords = function(){
return this.replace(/\b\w/gi, function(c,i,s) { return
c.toUpperCase(); });
}
</cit.>
Alors, voici en laborieux (et touj pas complet) :
function capitalise(Input) {
var cap = function(quoi) {
for (var i=0; i<quoi.length; i++)
quoi[i] = quoi[i].charAt(0).toUpperCase() +
quoi[i].substring(1);
return quoi;
}
var chaine = Input.value.toLowerCase();
// elimination des espaces avant ou après
chaine = chaine.replace(/(^\s+|\s+$)/g,'');
// elimination des doubles espaces
chaine = chaine.replace(/ +/g,' ');
// elimination des espaces autour tiret
chaine = chaine.replace(/( - | -|- )/g,'-');
// mise en maj de 1er caractère des elements du tableau des mots
// séparés par espace et idem tableau résultant avec séparateur tiret
chaine = cap(cap(chaine.split(' ')).join(' ').split('-')).join('-');
/* variante à ligne ci-dessus :
chaine = cap(chaine.split(' ')).join(' ');
chaine = cap(chaine.split('-')).join('-');
*/
Input.value = chaine;
}
à employer comme suit :
<input onchange="capitalise(this);">
--
sm