11463 sujets

JavaScript, DOM et API Web HTML5

Je travaille sur un projet JavaScript dans lequel je dois manipuler des chaînes de texte et je suis tombé sur la méthode toUpperCase(). Bien que je comprenne sa fonctionnalité de base de conversion de texte en majuscules, j'ai un cas d'utilisation spécifique dans lequel je rencontre des résultats inattendus.

Voici un exemple simplifié de ce que j'essaie de faire :

const text = 'Hello, world!';
const uppercaseText = text.toUpperCase();

console.log(uppercaseText); // Outputs: 'HELLO, WORLD!'


Cela fonctionne parfaitement pour la plupart des textes, mais lorsque j'ai des caractères spéciaux ou des lettres accentuées, le comportement n'est pas celui auquel je m'attendais. Par exemple:

const specialText = 'Café au lait';
const uppercaseSpecialText = specialText.toUpperCase();

console.log(uppercaseSpecialText); // Outputs: 'CAFÉ AU LAIT'


Le «é» accentué reste inchangé. Existe-t-il un moyen de faire en sorte que la méthode toUpperCase() gère également ces caractères spéciaux et ces lettres accentuées, afin que l'intégralité du texte soit transformée en majuscules ? J'ai cherché en ligne sur de nombreux sites Web comme Scaler, mais je n'ai pas trouvé de réponse. Tous les conseils ou extraits de code sur la façon de mettre en œuvre ce comportement, en particulier lorsque vous travaillez avec du contenu multilingue, seraient très appréciés. J'apprécie votre aide, et
Bonjour,

Il existe une autre méthode :
specialText.toLocaleUpperCase('FR')

PS : je reviens sur ce que j'ai dit, je ne suis pas sûr que le problème vienne de là car chez moi ça marche dans tous les cas...
Modifié par Olivier C (26 Sep 2023 - 21:01)
Bonsoir,

Il semble que vous vouliez que le 'café' devienne 'CAFE' mais ce n'est pas la même langue donc cela ne sera pas possible me semble-t-il.

il faudrait au préalable changer les caractères accentués en caractère 'anglais' non accentués.


const specialText = 'Café au lait sur la tête';
    
console.log(specialText.toUpperCase());   //  'CAFÉ AU LAIT SUR LA TÊTE'
console.log(specialText.toLocaleUpperCase('FR'));  // 'CAFÉ AU LAIT SUR LA TÊTE'
console.log(specialText.toLocaleUpperCase('en-US')); // 'CAFÉ AU LAIT SUR LA TÊTE'

function toUpper(string){
    let s = string.replaceAll(new RegExp(/[éêè]/g), 'e')
    return s.toUpperCase()
}

console.log(toUpper(specialText));    // CAFE AU LAIT SUR LA TETE


Et il faudrait faire la même chose avec 'à' et 'ç'... voire avec les caractères spéciaux quand cela est possible.

A priori, toUpperCase() ne le permet pas.
Dave-Hiock a écrit :
mais pourquoi vouloir enlever les accents sur les capitales, elles sont capitales Smiley biggrin

C'est vrai qu'il faut commencer par là.
En écriture manuscrite cursive cela ne se fait pas, mais en typographie cela semble essentiel.

Bien sûr, certains devs utilisent pour leur site des fonts optimisées pour un usage US et du coup ça ne passe pas (sans parler des "Æ", "Œ"...). Ce qui pourrait expliquer la volonté de supprimer les accents.
Modifié par Olivier C (28 Sep 2023 - 05:01)