Eki Eqbal
Eki Eqbal

Reputation: 6037

How to translate Arabic/Persian numbers to english using Ruby?

How can I convert some string that has Arabic/Persian number to English ?

Like if I have :

str1 = "١۲١۲"
str2 = "12١۲"
str3 = "some string that contains persian digits like ١۲"

Is there any function to encode it to english, and if the string contain such number to convert it like end results will be :

str1 = "1212"
str2 = "1212"
str3 = "some string that contains persian digits like 12"

Thanks

Upvotes: 1

Views: 1925

Answers (2)

steenslag
steenslag

Reputation: 80065

For these one on one transformations the tr-method is very convenient and fast. It has a mutating counterpart in tr!

#encoding: utf-8

str1 = "١۲١۲"
str2 = "12١۲"
str3 = "some string that contains persian digits like ١۲"

[str1, str2, str3].each{|str| str.tr!('۰١۲۳۴۵۶۷۸۹','0123456789')}

p str1, str2, str3
#"1212"
#"1212"
#"some string that contains persian digits like 12"

Upvotes: 9

fmendez
fmendez

Reputation: 7338

Since this is not encoding but translation and assuming your problem limits to only those numbers (0-9), you could write a simple 1-to-1 mapping from arabic to english, something like this:

  arabic_to_english = {
  '٩' => 9,
  '٨' => 8,
  '٧' => 7,
  '٦' => 6,
  '٥' => 5,
  '٤' => 4,
  '٣' => 3,
  '٢' => 2,
  '١' => 1,
  '٠' => 0
}

And you just call the hash whenever needed:

   arabic_to_english['٧']

Better if you extract this into a function of course.

Upvotes: 2

Related Questions