jens4ever
Goto Top

In Javascript arabische Zahlen in persische übersetzen

Hallo zusammen,

ich bräuchte einmal Hilfe in Javascript.
Folgender Code macht aus 123 (arabische Zahlen) persische Zahlen (۱۲۳).
Soweit so gut. Ich bräuchte das jedoch auch genau anders herum.
Ich hätte nun gedacht, dass im Code einfach die Zahlen auszutauschen, aber die arabischen Zahlen sind hier gar nicht drin. Ein dennoch absolvierter Versuch scheiterte kläglich.
myNumber = '123';  
myNumber= myNumber.replace(/[٠-٩]/g, d => \"۰۱۲٣٤٥٦٧٨٩\".indexOf(d)).replace(/[۰-۹]/g, d => \"۰۱۲۳۴۵۶۷۸۹\".indexOf(d));  

Ich wäre sehr dankbar, wenn jemand kurz zeigt, wie man aus 123 usw. dann ۱۲۳ usw. macht.

Danke und Gruß
Jensen

Content-Key: 621928

Url: https://administrator.de/contentid/621928

Printed on: May 3, 2024 at 18:05 o'clock

Member: GrueneSosseMitSpeck
GrueneSosseMitSpeck Nov 14, 2020 at 08:01:34 (UTC)
Goto Top
du gehst zu einfach an die Sache ran
erstens, was für ein Variablentyp ist das eigentlich? Das schreibst du garnicht.
zweitens es kann an allen möglichen Stellen Konvertierungsprobleme geben...
deshalb escapet man sowas.

https://www.educative.io/edpresso/how-to-insert-unicode-in-javascript


drittens benötigt so ein String am Anfang in den meisten Fällen zusätzlich den Unicode für "Schreibrichtung von rechts nach links wechseln" und am Ende des Strings wieder einen "Schreibrichtung links nach rechts wechseln" ansonsten kriegst du unter Umständen spiegelverkehrte Schrift, hatten wir schon in einer anderen Software.

wird hier näher erklärt:
ttps://www.w3.org/International/tutorials/bidi-xhtml/index.de

drittens du mußt den passenden Font verwenden, nicht alle Fonts haben alle Schriften
Member: BugfishTM
Solution BugfishTM Nov 15, 2020 updated at 09:06:53 (UTC)
Goto Top
Würde dir auch empfehlen hier Escape Sequenzen zu benutzen, du könntest die zahlen in UTF 8 konvertieren und dann aus der UTF8 Tabelle die Araischen Zahlen herraussuchen, danach jede dieser Zahlen mit dem passenden Persischen UTF 8 String ersetzen.

Hiermit scheitn es bei mir zu funktionieren:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JavaScript Replace Character in a String</title>
<script>
function strReplace(){
myNumber = '123';
myNumber = myNumber.replace(/0/g, "۰");
myNumber = myNumber.replace(/1/g, "۱");
myNumber = myNumber.replace(/2/g, "۲");
myNumber = myNumber.replace(/3/g, "۳");
myNumber = myNumber.replace(/4/g, "۴");
myNumber = myNumber.replace(/5/g, "۵");
myNumber = myNumber.replace(/6/g, "۶");
myNumber = myNumber.replace(/7/g, "۷");
myNumber = myNumber.replace(/8/g, "۸");
myNumber = myNumber.replace(/9/g, "۹");
document.getElementById("myText").innerHTML = myNumber;
}
</script>
</head>
<body>
<p id="myText">quick_brown_fox</p>
<button type="button" onclick="strReplace();">Replace</button>
</body>
</html>

HINWEIS: Damit dies funktioniert muss der output vom Browser als UTF-8 Codiert werden
Wenn der Output String reversed werden muss, weil persisch in der anderen Richtung gelesen wird (hab keine ahnung) dann sollte eine funktion die den finalen wert "reversed" reichen, etwa etwas wie dies hier:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JavaScript Replace Character in a String</title>
<script>
function strReplace(){
myNumber = '123';
myNumber = myNumber.replace(/0/g, "۰");
myNumber = myNumber.replace(/1/g, "۱");
myNumber = myNumber.replace(/2/g, "۲");
myNumber = myNumber.replace(/3/g, "۳");
myNumber = myNumber.replace(/4/g, "۴");
myNumber = myNumber.replace(/5/g, "۵");
myNumber = myNumber.replace(/6/g, "۶");
myNumber = myNumber.replace(/7/g, "۷");
myNumber = myNumber.replace(/8/g, "۸");
myNumber = myNumber.replace(/9/g, "۹");

var newString = "";
for (var i = myNumber.length - 1; i >= 0; i--) {
newString += myNumber[i];
}


document.getElementById("myText").innerHTML = newString;
}
</script>
</head>
<body>
<p id="myText">quick_brown_fox</p>
<button type="button" onclick="strReplace();">Replace</button>
</body>
</html>
Member: Jens4ever
Jens4ever Nov 16, 2020 at 11:01:16 (UTC)
Goto Top
Hi! Danke!

Ich habe es jetzt so gelöst:
myNumber = myNumber.replace(/0/g, \"۰\"); myNumber = myNumber.replace(/1/g, \"۱\"); myNumber = myNumber.replace(/2/g, \"۲\"); myNumber = myNumber.replace(/3/g, \"۳\"); myNumber = myNumber.replace(/4/g, \"۴\"); myNumber = myNumber.replace(/5/g, \"۵\"); myNumber = myNumber.replace(/6/g, \"۶\"); myNumber = myNumber.replace(/7/g, \"۷\"); myNumber = myNumber.replace(/8/g, \"۸\"); myNumber = myNumber.replace(/9/g, \"۹\");  

Ich gewinne damit vermutlich keinen Code Beauty Preis, aber es ist ein Einzeiler ;)

@GrueneSosseMitSpeck: Glaub ich stelle mir das nicht zu einfach vor. Persische und arabische Zahlen werden beide von links gelesen.

LG
Jensen