1

このアプリケーションでは、登録番号(SSNに類似したオーストラリアの事業番号またはオーストラリアの会社番号)の数字の文字列(文字列として保存)があります。次に例を示します。

"98123123999"

この情報をWebアプリケーションに表示するときは、数字を読みやすくするために再フォーマットできると便利です。例:

98 123 123 999

ルビーで私がこれまでに持っている最良の解決策は次のとおりです。

  1. 長さを確認してください
  2. スライス演算子を使用して文字列をフォーマットします。[a[0,2], a[2,3], a[5,3], a[8, 3]].join(" ")

しかし、これはにおいがして、正しくないようです。

一見とてもシンプルなことをするための最良の方法は何ですか?

編集:数値の文字列の前に0を付けることができることにも注意する必要があります(例:「012345678901」)。そのため、整数として解析してフォーマット文字列を使用することはできません。

4

5 に答える 5

4

使用する

a = "98123123999"
=> "98123123999" 
b = a.split('').insert(2, ' ').insert(6, ' ').insert(10, ' ')
=> "9", "8", " ", "1", "2", "3", " ", "1", "2", "3", " ", "9", "9", "9"] 
b = a.split('').insert(2, ' ').insert(6, ' ').insert(10, ' ').join
=> "98 123 123 999" 

または、文字列を変更したい場合

a = "98123123999"
=> "98123123999" 
b = a.insert(2, ' ').insert(6, ' ').insert(10, ' ')
=> "98 123 123 999" 
a
=> "98 123 123 999" 
于 2012-10-11T07:03:03.880 に答える
4

より一般的な観点から、レールを使用する場合は、を使用できますnumber_with_delimiter(number, delimiter=",", separator=".")

それ以外の場合は、ソースコードに基づいて何かを書くだけかもしれません。

number.to_s.gsub!(/(\d)(?=(\d{3})+(?!\d))/, "\\1#{' '}")

>> 1234567890.to_s.gsub!(/(\d)(?=(\d{3})+(?!\d))/, "\\1#{' '}")
=> "1 234 567 890"
于 2012-10-11T07:11:38.893 に答える
1

これを試して:

def format_digit(s, acc="")
  if s.size > 3
    new_acc = s[-3..-1] + " " +acc
    format_digit(s[0...-3], new_acc)
  else
    s + " " + acc
  end
end

s = "98123123999"
puts format_digit(s)
于 2012-10-11T07:01:35.653 に答える
1

これがニーズに合っているかどうかわからないため、2桁のグループが最初ではなく最後に表示されます...

"98123123999".scan(/.{1,3}/).join(' ') #=> "981 231 239 99"
于 2012-10-11T08:06:21.113 に答える
0
str           = "098123123999"
formatted_arr = []

if str.length % 3 == 0
    (str.length/3).times { formatted_arr << str.slice!(0..2) }
else
    formatted_arr << str.slice!(0..str.length % 3 - 1)
    (str.length/3).times { formatted_arr << str.slice!(0..2) }
end

puts formatted_arr.join(" ") # 098 123 123 999
于 2012-10-11T07:13:40.927 に答える