From: Rob Biedenharn Date: 2006-06-29T03:28:38+09:00 Subject: Re: string manipulation On Jun 28, 2006, at 1:13 PM, Martin Jansson wrote: > siva kumar wrote: >> How to add "-" between the numbers >> Eg: >> 123456789123456789 as 12-3456-7891-2345-6789 > > irb(main):001:0> s = 123456789123456789.to_s > => "123456789123456789" > > irb(main):002:0> "#{s[0,2]}-#{s[2,4]}-#{s[6,4]}-#{s[10,4]}-#{s[14,4]}" > => "12-3456-7891-2345-6789" > > irb(main):003:0> > "#{s[0..1]}-#{s[2..5]}-#{s[6..9]}-#{s[10..13]}-#{s[14..17]}" > => "12-3456-7891-2345-6789" > > irb(main):004:0> def f(n, p=4, s="") > irb(main):005:1> i= n.to_i > irb(main):006:1> return s if i<=0 > irb(main):007:1> a= 10**p > irb(main):008:1> f(i/a, p, (i%a).to_s+(s=="" ? "" : "-"+s)) > irb(main):009:1> end > => nil > > irb(main):010:0> f s > => "12-3456-7891-2345-6789" > > irb(main):011:0> f s.to_i > => "12-3456-7891-2345-6789" > > irb(main):012:0> f s, 5 > => "123-45678-91234-56789" building on the ActionPack helper number_with_delimiters def number_with_dashes(number, groups=4, delimiter="-") re = %r/(\d)(?=(\d{#{groups}})+(?!\d))/ number.to_s.gsub(re, "\\1#{delimiter}") end irb(main):023:0> number_with_dashes(123456789123456789) => "12-3456-7891-2345-6789"