Oneliner of all 6 possible translations between English, Arabic, and persian Digits.
const e2p = s => s.replace(/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d])
const e2a = s => s.replace(/\d/g, d => '٠١٢٣٤٥٦٧٨٩'[d])
const p2e = s => s.replace(/[۰-۹]/g, d => '۰۱۲۳۴۵۶۷۸۹'.indexOf(d))
const a2e = s => s.replace(/[٠-٩]/g, d => '٠١٢٣٤٥٦٧٨٩'.indexOf(d))
const p2a = s => s.replace(/[۰-۹]/g, d => '٠١٢٣٤٥٦٧٨٩'['۰۱۲۳۴۵۶۷۸۹'.indexOf(d)])
const a2p = s => s.replace(/[٠-٩]/g, d => '۰۱۲۳۴۵۶۷۸۹'['٠١٢٣٤٥٦٧٨٩'.indexOf(d)])
e2p("asdf1234") // asdf۱۲۳۴
e2a("asdf1234") // asdf١٢٣٤
p2e("asdf۱۲۳۴") // asdf1234
a2e("asdf١٢٣٤") // asdf1234
p2a("asdf۱۲۳۴") // asdf١٢٣٤
a2p("asdf١٢٣٤") // asdf۱۲۳۴
Explaination:
(s => f(s))(x)is a lambda function that is immediately executed, and will be equal to f(x)s.replace(pattern, function)looks for matches of pattern in s, for every match m it will replace m withfunction(m)in the string./\d/gis a regex pattern,\dmeans a digit in the English language,gmeans global. If you don’t specify thegit will only match the first occurrence, otherwise it will match all the occurrences.- In this case for every English digit
din the string, that digit will be replaced by'۰۱۲۳۴۵۶۷۸۹'[d]so, 3 will be replaced by the third index in that list('۰۱۲۳۴۵۶۷۸۹') which is ‘۳’ /[۰-۹]/gis the equivalent regex for Persian digits this time we can’t use the same method, before we took advantage of the fact that javascript is dynamically typed and that d is automatically converted from a string(regex match) to a number(array index) (you can do'1234'['1']in javascript which is the same as'1234'[1])- but this time we can’t do that because
'1234'['۱']is invalid. so we use a trick here and useindexOfwhich is a function that tells us the index of an element in an array(here a character in a string) so,'۰۱۲۳۴۵۶۷۸۹'.indexOf(۳)will give us3because'۳'is the third index in the string'۰۱۲۳۴۵۶۷۸۹'