Как отобразить длинный номер в группах? - PullRequest
0 голосов
/ 27 ноября 2010

У меня есть строка

string = '1234432198766789'

Я хочу, чтобы это выглядело так:

"1234 4321 9876 6789"

Каков наилучший способ сделать это? Я могу использовать String-расширения Rails.

Я не хочу изменять исходную строку, поэтому невозможно использовать метод insert.

Ответы [ 3 ]

4 голосов
/ 27 ноября 2010
p '12345678'.reverse.scan(/.{1,4}/).join(' ').reverse
# => "1234 5678"

Почему двойной reverse?Чтобы длина строки не была кратна четырем, группа нечетного размера будет слева:

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

Если вы знаете, что ваша строка всегда будет кратна четырем, илине обращайте внимания на группу странного размера, находящуюся справа, затем пропустите два вызова на reverse.

p '123456'.scan(/.{1,4}/).join(' ')
# => "1234 56"
4 голосов
/ 27 ноября 2010

Длинная версия:

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

Это должен быть какой-то номер телефона?В Rails есть помощник number_to_phone, который вы можете использовать .

1 голос
/ 27 ноября 2010

Другое решение:

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

P.S. Преимущество решения Райана состоит в том, что вы можете изменить string.split('') на string.chars.to_a, если вам когда-либо придется делать вещи i18n. Это может быть кошмар ...

...