背景
通貨を表示する際、数字を3桁区切りでカンマを挿入するかと思います。
Rails環境では
-
number_to_currency
メソッド -
delimited
メソッド
どちらかを利用して簡単に表示できますが、Ruby環境では両者が利用できませんでした。そのため、正規表現を用いてメソッド化をしました。
number_to_currency
メソッドについては、Rubyで数値を3桁区切りにする方法!を参照してください。
実装したコード
def converting_to_jpy(price)
puts "#{price.to_s.reverse.gsub(/\d{3}/, '\0,').reverse}円"
end
converting_to_jpy(1234567890)
# => 1,234,567,890円
仕組み
考え方
数字の末尾から数えて3文字毎にカンマを入れる
つまり
- 数字を文字列に変換
- その文字列を反転(順番を入れ替える)
- 3文字毎にカンマを入れる
- 最後にもう一度反転させ、元の順番に戻す
という流れで実装しました。
ポイントとしては、3. 3文字毎にカンマを入れる
の部分でしょうか。
.gsub(pattern, replace)
は文字列中でpattern
にマッチする部分全てを文字列replace
で置き換えた文字列を生成して返すメソッドです。
また、\0
は一致した文字列全体に置換する正規表現です。このケースの場合\d{3}
に該当します。つまり、以下のように言えます。
"1114447770".gsub(/\d{3}/, '\0,')
# => "111,444,777,0"
# 3文字毎の文字列の後ろにカンマを入れる
開発環境
ruby 2.5.1