Chciałbym przekonwertować występowanie niektórych znaków specjalnych z funkcją łańcuchową, aby pracować w ten sposób:
>>> "Den här ån gör gott".normalizor().toUpperCase();
"DEN HAR AN GOR GOTT"
Jestem zainteresowany tylko konwersją niektórych znaków:
å >> a
ä >> a
ö >> o
Jakakolwiek pomoc, która pomoże mi we właściwym kierunku, byłaby mile widziana!
Czysty javascript lub korzystanie z dowolnej biblioteki nie ma znaczenia.
Odpowiedzi:
1 dla odpowiedzi № 1normalize
wydaje się lepszą nazwą metody:
"Den här ån gör gott".normalize().toUpperCase();
String.prototype.normalize = function() {
return this.replace(/[åä]/g, "a")
.replace(/[ö]/g, "o");
}
0 dla odpowiedzi nr 2
Jeśli chcesz przekonwertować te znaki specjalne, możesz odwzorować wartości ASCII niemieckiego (I "m zakładając) znaki na proste angielskie.
Na przykład tutaj chcesz odwzorować
ASCII 229 (å) do ASCII 97 (a)
ASCII 228 (ä) do ASCII 97 (a)
ASCII 246 (ö) do ASCII 111 (o)
function normalizor(char) {
if (char.charCodeAt()===228 || char.charCodeAt()===229)
return String.fromCharCode(97);
//or simply return "a";
}
0 dla odpowiedzi № 3
Google dało mi takie rozwiązanie:
String.prototype.normalizor = function() {
var s, i, l, diacritics, chars;
s = this;
chars = ["A", "a", "E", "e", "I", "i", "O", "o", "U", "u", "N", "n", "C", "c"];
diacritics = [
/[300-306]/g, /[340-346]/g, // A, a
/[310-313]/g, /[350-353]/g, // E, e
/[314-317]/g, /[354-357]/g, // I, i
/[322-330]/g, /[362-370]/g, // O, o
/[331-334]/g, /[371-374]/g, // U, u
/[321]/g, /[361]/g, // N, n
/[307]/g, /[347]/g, // C, c
];
for (i = 0, l = diacritics.length; i < l; i++) {
s = s.replace(diacritics[i], chars[i]);
}
return s;
}
Ten sam temat na temat SO: Zastępowanie znaków diakrytycznych w Javascript.