2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyで数値を3桁区切りにする方法 (正規表現)

Posted at

背景

通貨を表示する際、数字を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文字毎にカンマを入れる
つまり

  1. 数字を文字列に変換
  2. その文字列を反転(順番を入れ替える)
  3. 3文字毎にカンマを入れる
  4. 最後にもう一度反転させ、元の順番に戻す

という流れで実装しました。
ポイントとしては、3. 3文字毎にカンマを入れるの部分でしょうか。

.gsub(pattern, replace)

は文字列中でpatternにマッチする部分全てを文字列replaceで置き換えた文字列を生成して返すメソッドです。
また、\0は一致した文字列全体に置換する正規表現です。このケースの場合\d{3}に該当します。つまり、以下のように言えます。

"1114447770".gsub(/\d{3}/, '\0,')
# => "111,444,777,0"
# 3文字毎の文字列の後ろにカンマを入れる

開発環境

ruby 2.5.1

2
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?