Für die Jungs, die TypScript und diejenigen, die sich nicht mit String-Prototypen befassen wollen, finden hier eine Typescript-Version von Ed.'s Antwort :
// Usage example:
"Some string".replace(/[^a-zA-Z0-9-_]/g, char => ToLatinMap.get(char) || '')
// Map:
export let ToLatinMap: Map<string, string> = new Map<string, string>([
["Á", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["Â", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["Ä", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["À", "A"],
["", "A"],
["", "A"],
["", "A"],
["", "A"],
["Å", "A"],
["", "A"],
["", "A"],
["", "A"],
["Ã", "A"],
["", "AA"],
["Æ", "AE"],
["", "AE"],
["", "AE"],
["", "AO"],
["", "AU"],
["", "AV"],
["", "AV"],
["", "AY"],
["", "B"],
["", "B"],
["", "B"],
["", "B"],
["", "B"],
["", "B"],
["", "C"],
["", "C"],
["Ç", "C"],
["", "C"],
["", "C"],
["", "C"],
["", "C"],
["", "C"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "D"],
["", "DZ"],
["", "DZ"],
["É", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["Ê", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["Ë", "E"],
["", "E"],
["", "E"],
["", "E"],
["È", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "E"],
["", "ET"],
["", "F"],
["", "F"],
["", "G"],
["", "G"],
["", "G"],
["", "G"],
["", "G"],
["", "G"],
["", "G"],
["", "G"],
["", "G"],
["", "H"],
["", "H"],
["", "H"],
["", "H"],
["", "H"],
["", "H"],
["", "H"],
["", "H"],
["", "H"],
["Í", "I"],
["", "I"],
["", "I"],
["Î", "I"],
["Ï", "I"],
["", "I"],
["", "I"],
["", "I"],
["", "I"],
["Ì", "I"],
["", "I"],
["", "I"],
["", "I"],
["", "I"],
["", "I"],
["", "I"],
["", "I"],
["", "D"],
["", "F"],
["", "G"],
["", "R"],
["", "S"],
["", "T"],
["", "IS"],
["", "J"],
["", "J"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "K"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "L"],
["", "LJ"],
["", "M"],
["", "M"],
["", "M"],
["", "M"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["", "N"],
["Ñ", "N"],
["", "NJ"],
["Ó", "O"],
["", "O"],
["", "O"],
["Ô", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["Ö", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["Ò", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "O"],
["Ø", "O"],
["", "O"],
["Õ", "O"],
["", "O"],
["", "O"],
["", "O"],
["", "OI"],
["", "OO"],
["", "E"],
["", "O"],
["", "OU"],
["", "P"],
["", "P"],
["", "P"],
["", "P"],
["", "P"],
["", "P"],
["", "P"],
["", "Q"],
["", "Q"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "R"],
["", "C"],
["", "E"],
["", "S"],
["", "S"],
["Š", "S"],
["", "S"],
["", "S"],
["", "S"],
["", "S"],
["", "S"],
["", "S"],
["", "S"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "T"],
["", "A"],
["", "L"],
["", "M"],
["", "V"],
["", "TZ"],
["Ú", "U"],
["", "U"],
["", "U"],
["Û", "U"],
["", "U"],
["Ü", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["Ù", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "U"],
["", "V"],
["", "V"],
["", "V"],
["", "V"],
["", "VY"],
["", "W"],
["", "W"],
["", "W"],
["", "W"],
["", "W"],
["", "W"],
["", "W"],
["", "X"],
["", "X"],
["Ý", "Y"],
["", "Y"],
["Ÿ", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Y"],
["", "Z"],
["Ž", "Z"],
["", "Z"],
["", "Z"],
["", "Z"],
["", "Z"],
["", "Z"],
["", "Z"],
["", "Z"],
["", "IJ"],
["Œ", "OE"],
["", "A"],
["", "AE"],
["", "B"],
["", "B"],
["", "C"],
["", "D"],
["", "E"],
["", "F"],
["", "G"],
["", "G"],
["", "H"],
["", "I"],
["", "R"],
["", "J"],
["", "K"],
["", "L"],
["", "L"],
["", "M"],
["", "N"],
["", "O"],
["", "OE"],
["", "O"],
["", "OU"],
["", "P"],
["", "R"],
["", "N"],
["", "R"],
["", "S"],
["", "T"],
["", "E"],
["", "R"],
["", "U"],
["", "V"],
["", "W"],
["", "Y"],
["", "Z"],
["á", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["â", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["ä", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["à", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["", "a"],
["å", "a"],
["", "a"],
["", "a"],
["", "a"],
["ã", "a"],
["", "aa"],
["æ", "ae"],
["", "ae"],
["", "ae"],
["", "ao"],
["", "au"],
["", "av"],
["", "av"],
["", "ay"],
["", "b"],
["", "b"],
["", "b"],
["", "b"],
["", "b"],
["", "b"],
["", "b"],
["", "b"],
["", "o"],
["", "c"],
["", "c"],
["ç", "c"],
["", "c"],
["", "c"],
["", "c"],
["", "c"],
["", "c"],
["", "c"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "d"],
["", "i"],
["", "j"],
["", "j"],
["", "j"],
["", "dz"],
["", "dz"],
["é", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["ê", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["ë", "e"],
["", "e"],
["", "e"],
["", "e"],
["è", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "e"],
["", "et"],
["", "f"],
["ƒ", "f"],
["", "f"],
["", "f"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "g"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "h"],
["", "hv"],
["í", "i"],
["", "i"],
["", "i"],
["î", "i"],
["ï", "i"],
["", "i"],
["", "i"],
["", "i"],
["ì", "i"],
["", "i"],
["", "i"],
["", "i"],
["", "i"],
["", "i"],
["", "i"],
["", "i"],
["", "i"],
["", "d"],
["", "f"],
["", "g"],
["", "r"],
["", "s"],
["", "t"],
["", "is"],
["", "j"],
["", "j"],
["", "j"],
["", "j"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "k"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "l"],
["", "lj"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "m"],
["", "m"],
["", "m"],
["", "m"],
["", "m"],
["", "m"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["", "n"],
["ñ", "n"],
["", "nj"],
["ó", "o"],
["", "o"],
["", "o"],
["ô", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["ö", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["ò", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "o"],
["ø", "o"],
["", "o"],
["õ", "o"],
["", "o"],
["", "o"],
["", "o"],
["", "oi"],
["", "oo"],
["", "e"],
["", "e"],
["", "o"],
["", "o"],
["", "ou"],
["", "p"],
["", "p"],
["", "p"],
["", "p"],
["", "p"],
["", "p"],
["", "p"],
["", "p"],
["", "p"],
["", "q"],
["", "q"],
["", "q"],
["", "q"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "c"],
["", "c"],
["", "e"],
["", "r"],
["", "s"],
["", "s"],
["š", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "s"],
["", "g"],
["", "o"],
["", "o"],
["", "u"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "t"],
["", "th"],
["", "a"],
["", "ae"],
["", "e"],
["", "g"],
["", "h"],
["", "h"],
["", "h"],
["", "i"],
["", "k"],
["", "l"],
["", "m"],
["", "m"],
["", "oe"],
["", "r"],
["", "r"],
["", "r"],
["", "r"],
["", "t"],
["", "v"],
["", "w"],
["", "y"],
["", "tz"],
["ú", "u"],
["", "u"],
["", "u"],
["û", "u"],
["", "u"],
["ü", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["ù", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "u"],
["", "ue"],
["", "um"],
["", "v"],
["", "v"],
["", "v"],
["", "v"],
["", "v"],
["", "v"],
["", "v"],
["", "vy"],
["", "w"],
["", "w"],
["", "w"],
["", "w"],
["", "w"],
["", "w"],
["", "w"],
["", "w"],
["", "x"],
["", "x"],
["", "x"],
["ý", "y"],
["", "y"],
["ÿ", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "y"],
["", "z"]
["ž", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "z"],
["", "ff"],
["", "ffi"],
["", "ffl"],
["", "fi"],
["", "fl"],
["", "ij"],
["œ", "oe"],
["", "st"],
["", "a"],
["", "e"],
["", "i"],
["", "j"],
["", "o"],
["", "r"],
["", "u"],
["", "v"],
["", "x"],
]);
12 Stimmen
Sie liegen falsch mit Ihrer Annahme, dass ein Benutzer erwartet, dass "ä" mit "a" sortiert wird. Das schwedische Alphabet hat 29 Buchstaben: abcdefghijklmnopqrstuvwxyzåäö und das dänische/norwegische auch: abcdefghijklmnopqrstuvwxyzæøå. Die erwartete Reihenfolge ist: "Apelsin", "Banan", "Äpple".
1 Stimmen
Ich weiß. Die Lösung war für die Sortierung deutscher Texte gedacht. Auch dort ist sie nicht richtig aber gut genug für den Anwendungsfall. Diese Frage war nie als Suche nach dem "löst alle Probleme"-Algorithmus gedacht.
1 Stimmen
Ich habe die Frage ein wenig umformuliert, um das von Anfang an klar zu machen.
1 Stimmen
@Tomalak: Ich bin auf deine Frage gestoßen, als ich einem Link von einer anderen Frage über "u" und "ü" gefolgt bin und musste widersprechen. Aber da Sie nun klargestellt haben, dass es um Deutsch ging, habe ich nichts weiter zu beanstanden.
4 Stimmen
@some: Ich ziehe eine kurze Diskussion in den Kommentaren einem Down-Vote jederzeit vor. Leider gibt es hier auch Leute, die erst abstimmen und dann Fragen stellen (wenn überhaupt). Konsequenz: Ihr Kommentar wurde gewürdigt :)
0 Stimmen
@Tomalak:Leider gibt es Leute, die ohne ersichtlichen Grund abwerten, selbst bei korrekten Antworten und kristallklaren Fragen Ich frage mich, ob sie bemerkt haben, dass sie selbst einen Punkt verlieren Ich ziehe es vor, stattdessen einen Kommentar zu hinterlassen, damit der Autor Klarstellungen/Korrekturen vornehmen kann. IMHO ist das besser.
1 Stimmen
Nur damit Sie es wissen, ich habe einen Fork von tablesorter, in dem ich die Original
sortLocaleCompare
Option um diese akzentuierten Zeichenfolgen automatisch zu ersetzen; siehe diese Demo für weitere Einzelheiten. Wenn das immer noch nicht funktioniert, dann schauen Sie doch mal unter diese Demo die den Standardtextsortierer durch sugar.js ersetzt.0 Stimmen
Danke @Mottie. (Ich glaube
sortLocaleCompare
gab es noch nicht, als ich diese Frage zum ersten Mal schrieb).0 Stimmen
Tatsächlich gab es diese Funktion bereits in v2.0.5 (undokumentiert), und alles, was sie tat, war
return a.localeCompare(b);
innerhalb einer Sorte.0 Stimmen
Siehe eine neuere Lösung stackoverflow.com/a/18391901/759452
1 Stimmen
Es gibt ein NPM-Paket, das genau dies tut, github.com/andrewrk/node-diacritics .
1 Stimmen
Ist damit Ihre Frage beantwortet? Akzente/Diakritische Zeichen in einer Zeichenkette in JavaScript entfernen