2013-03-14 3 views
-1

Я просто обучение рубина и хотел бы преобразовать ниже функцию рубин из PHPPHP Рубин strtr и preg_replace

function stringToDigits($str) 
{ $str = strtolower($str); 
    $from = 'abcdefghijklmnopqrstuvwxyz'; 
    $to = '22233344455566677778889999'; 
    return preg_replace('/[^0-9]/', '', strtr($str, $from, $to)); 
} 

Я извиняюсь за не объясняя должным образом ранее. Это мой первый вопрос ....

У меня возникла проблема с преобразованием его в рубин. Это то, что я сделал

class String 
    def str_to_digits str 
     str = str.downcase 
     from = 'abcdefghijklmnopqrstuvwxyz' 
     to = '22233344455566677778889999' 
     self.gsub('/[^0-9]', '') 
     # here I am having problem to translate the whole string 'str' from 'from' to 'to' 
     # I dont know how to write it in ruby 
    end 
end 
+3

И ваш вопрос? Вы сказали, чего хотите, но не то, что вы пробовали, и где вы застряли. – IMSoP

+0

Мы ожидаем, что вы покажете, что вы сделали, чтобы попытаться решить проблему. –

+1

** Покажите нам, что вы пробовали до сих пор. ** Не описывайте это, но отредактируйте вопрос и вставьте фактический код. Тогда скажите нам, что не получилось. Что случилось, когда вы попробовали? Получили ли вы неправильные результаты? Вы получили * нет * результаты? Если результаты были неверными, что сделало их неправильными? Что вы ожидали вместо этого? Вы получили * любые * правильные результаты? Если да, то каковы они? Не заставляй нас гадать. –

ответ

0

Вы можете использовать String#tr(from, to).
Документация: http://ruby-doc.org/core-2.0/String.html#method-i-tr

Однако вы создаете метод экземпляра для строки прямо сейчас. Вы назвали бы это так:

"examplestring".str_to_digits("second examplestring") 

Но вам нужно только одну строку, так что у вас есть три варианта:

class String 
    FROM = 'abcdefghijklmnopqrstuvwxyz' 
    TO = '22233344455566677778889999' 

    def instance_str_to_digits 
    return self.downcase.gsub(/\d/, '').tr(FROM, TO) 
    end 

    def destructive_instance_str_to_digits! 
    self.downcase! 
    self.gsub!(/\d/, '') 
    self.tr!(FROM, TO) 
    end 

    def self.class_str_to_digits(str) 
    return str.downcase.gsub(/\d/, '').tr(FROM, TO) 
    end 
end 

# calling the methods: 
str = "examplestring" 
result_1 = str.instance_str_to_digits 
result_2 = String.class_str_to_digits(str) 
str.destructive_instance_str_to_digits! # result overrides str 
+0

Большое спасибо за помощь – user2171714