-1

私はちょうどルビーを学んでいて、以下の関数をphpからルビーに変換したいと思います

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
4

1 に答える 1

0

使用できますString#tr(from, to)
ドキュメント: http://ruby-doc.org/core-2.0/String.html#method-i-tr

ただし、現在、文字列のインスタンス メソッドを作成しています。次のように呼び出します。

"examplestring".str_to_digits("second examplestring")

ただし、必要な文字列は 1 つだけなので、次の 3 つのオプションがあります。

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
于 2013-03-14T23:34:48.363 に答える