IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Téléchargé 7 fois
Vote des utilisateurs
1 
0 
Détails
Éditeur : Pyraelog
Licence : LGPL
Mise en ligne le 7 novembre 2018
Langue : Français
Référencé dans
Navigation

Conversion des lettres accentuées (suppression des diacritiques) en javascript

Cette fonction, utilisant une unique expression régulière, est très rapide et particulièrement recommandée pour des traitements intensifs (conversion de listes, comparaisons multiples...)."
Elle présente la particularité de fonctionner aussi avec les graphèmes tels que "æ", "œ".
L'expression régulière est construite directement à partir d'un Object 'dicLetAcc' utilisé comme dictionnaire de conversion, lui-même élaboré à partir d'un premier Object 'dicConv', présentant les données de manière plus lisible et plus facile à maintenir.
Ce dictionnaire est limité aux caractères utilisés en français plus quelques autres, ajoutez simplement les conversions qui vous manquent, ou au contraire simplifiez-le pour ne conserver que les caractères utiles...
Nos ressources disponibles
Code : Sélectionner tout
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
var dicConv = {a:"àáâãäå", ae:"æ", c: "ç", e:"èéêë", i:"ìíîï", n:"ñ", o:"òóôõöø", oe:"œ", u:"ùúûü", y:"ÿ"};  
var dicLetAcc = {}; 
for (let cnv in dicConv) { 
  let lst = Array.from(dicConv[cnv]); 
  for (let c of lst) {  
    dicLetAcc[c] = cnv; 
    dicLetAcc[c.toUpperCase()] = cnv.toUpperCase(); 
  } 
} 
var lstCar = Object.keys(dicLetAcc).join(''); 
var reSansAcc = new RegExp("[" + lstCar + "]", "g"); 
 
function sansAccent(txt) { 
  return txt.replace(reSansAcc, function(t){return dicLetAcc[t]}); 
} 
function sansAccentSup(txt) { 
  if (txt.match(/[ƌ]/)) 
     return sansAccent(txt).replace(/\b(A|O)E(?=[a-z])/g, "$1e"); 
  return sansAccent(txt); 
} 
  
// partie test 
var TestTexte = "Cas particuliers : Œil ŒIL Æde ÆCetc. PŒLE..." 
var tim = new Date().getTime(); 
alert(lstCar + '\n=> ' + sansAccent(lstCar) + '\n\n' + sansAccentSup(TestTexte) + '\n\ntemps (ms) : ' + (new Date().getTime() - tim));
Vous pouvez également utiliser directement l'expression régulière pour tester si un texte comporte des diacritiques :
Code : Sélectionner tout
if (txt.match(reSansAcc)) ...

Fignolage :
La fonction sansAccentSup() permet de gérer le cas très rare des Æ et Œ utilisés comme lettre capitales.
Cette variante les corrige en "Ae" et "Oe" :
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.