1

数値を取得して、価格として(文字列として)フォーマットしたいと思います。たとえば、250000を取り、$250,000を表示したいとします。正規表現を使用してこれを達成するにはどうすればよいですか?

4

4 に答える 4

5

カンマを追加するには、次のようなものを試してみてください。

/(\d)(?=(?:\d{3})+$)/

次に、すべての一致を。に置き換え\1,ます。

そのような:

"12345512312".gsub(/(\d)(?=(?:\d{3})+$)/,'\1,')  => "12,345,512,312"

これは、任意の数字の後に任意の数の3桁のグループが続く場合に一致します。

たとえば、上記の例の最初のグループの後には、、、および2の3つのグループが続きます。最初のグループの後には、となどの2つのグループが続きます。3455123125512312

$ただし、同じ正規表現にを追加できるかどうかはわかりません。

于 2013-03-11T15:28:52.520 に答える
2

これを試してみてください(免責事項-正規表現ではありません):

def prettify(n)
  int, dec = n.to_s.split('.')
  int = int.reverse.scan(/.{1,3}/).join(',').reverse
  [int, dec].reject(&:empty?).join('.')
end

おそらくこの種のもののための宝石がそこにあります

于 2013-03-11T15:29:30.143 に答える
2

正規表現とのマッチングは#@の苦痛です!この場合、正規表現エンジンは文字列の終わりではなく最初から照合を開始するためです(文字列の終わりから始まり、逆方向に進む3桁のパターンを検索します)。私は次のようなことをすることをお勧めします:

format_int = ->(s) do
  str = s.reverse.scan(/\d{1,3}/).join(',').reverse
  "$#{str}"
end

format_int['2500600'] => "$2,500,600"

...使用するKernel#sprintf(これは少し注意が必要な場合があります)または、必要に応じて:私は間違っていましたが、ここここに示すように正規表現で実現できます。

于 2013-03-11T15:31:04.420 に答える
0

を使用する必要がありますnumber_to_currency helper

number_to_currency(1234567890.50)                    # => $1,234,567,890.50
number_to_currency(1234567890.506)                   # => $1,234,567,890.51
number_to_currency(1234567890.506, precision: 3)     # => $1,234,567,890.506
number_to_currency(1234567890.506, locale: :fr)      # => 1 234 567 890,51 €
number_to_currency("123a456")                        # => $123a456

number_to_currency("123a456", raise: true)           # => InvalidNumberError

number_to_currency(-1234567890.50, negative_format: "(%u%n)")
# => ($1,234,567,890.50)
number_to_currency(1234567890.50, unit: "£", separator: ",", delimiter: "")
# => £1234567890,50
number_to_currency(1234567890.50, unit: "£", separator: ",", delimiter: "", format: "%n %u")
# => 1234567890,50 £

詳細については、http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.htmlを参照してください。

于 2013-12-20T20:49:30.723 に答える