formatage regex majuscules

Le
Serge Hipontoise
Bonjour j'ai un petit script qui me permet de passer en "nom propre" un nom
rentré dans un champ`
lorsque'on rentre "claude" ou "CLAUDE" cela me donne "Claude"

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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #777688
Bonjour j'ai un petit script qui me permet de passer en "nom propre" un nom
rentré dans un champ`
lorsque'on rentre "claude" ou "CLAUDE" cela me donne "Claude"

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


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
String.prototype.ucwords = function(){
return this.replace(/bw/gi, function(c,i,s) { return
c.toUpperCase(); });
}

Tu l'utiliseras après comme ceci :
var m = pif.toLowerCase().ucwords();

Olivier Miakinen
Le #777687
Le 12/02/2008 12:03, je répondais à Serge Hipontoise :

[...] j'aimerais avoir "Jean Claude" ou "Jean-Claude" voire même un
"-" remplacant l'espace de "Jean Claude"


String.prototype.ucwords = function(){
return this.replace(/bw/gi, function(c,i,s) { return
c.toUpperCase(); });
}
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 ».


Olivier Miakinen
Le #777686
Et zut, je tape trop vite sur Entrée avant d'avoir répondu à tout.


[...] 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.

SAM
Le #777685
Bonjour j'ai un petit script qui me permet de passer en "nom propre" un nom
rentré dans un champ`
lorsque'on rentre "claude" ou "CLAUDE" cela me donne "Claude"

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


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;
}





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

Serge Hipontoise
Le #929964
Hello un grand merci a tous les deux pour vos reponses



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
SAM
Le #976349

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


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
String.prototype.ucwords = function(){
return this.replace(/bw/gi, function(c,i,s) { return
c.toUpperCase(); });
}



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

Publicité
Poster une réponse
Anonyme