如何在组中显示长号?

时间:2010-11-26 22:28:55

标签: ruby-on-rails ruby string formatting

我有一个字符串

string = '1234432198766789'

我希望它看起来像这样:

"1234 4321 9876 6789"

最好的方法是什么?我能够使用Rails的字符串扩展。

我不想修改原始字符串,因此无法使用insert方法。

3 个答案:

答案 0 :(得分:4)

长版:

string.split("").in_groups_of(4).map { |s| s.join("") }.join(" ")

这应该是某种电话号码吗? Rails有一个number_to_phone helper that you could use

答案 1 :(得分:4)

p '12345678'.reverse.scan(/.{1,4}/).join(' ').reverse
# => "1234 5678"

为什么双reverse?因此,当字符串的长度不是4的倍数时,奇数大小的组将位于左侧:

p '123456'.reverse.scan(/.{1,4}/).join(' ').reverse
# => "12 3456"

如果您知道您的字符串将始终是四的倍数,或者如果您不介意奇数大小的组位于右侧,则忽略对reverse的两次调用。

p '123456'.scan(/.{1,4}/).join(' ')
# => "1234 56"

答案 2 :(得分:1)

另一种解决方案:

string.scan(/.{1,4}/).join(' ')

P.S。 Ryan的解决方案有可能随着string.split('')改变string.chars.to_a,如果你不得不做i18n的话。这可能是一场噩梦...