Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

formatage regex majuscules

6 réponses
Avatar
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

6 réponses

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

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

Avatar
Olivier Miakinen
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 ».


Avatar
Olivier Miakinen
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.

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



<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

Avatar
Serge Hipontoise
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
Avatar
SAM

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
<cit.>
String.prototype.ucwords = function(){
return this.replace(/bw/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