How to format this international phone number in Rails?

后端 未结 4 1884
情话喂你
情话喂你 2020-12-08 17:58

If I have an international phone number such as this:

0541754301

how can I format it to produce something like this:

相关标签:
4条回答
  • 2020-12-08 18:05

    There's phony and phone gems available.

    Phony.formatted('18091231234', :format => :international).should == '+1 809 123 1234'
    

    or simliarly

    phone.format("+ %c (%a) %n") # => "+ 385 (91) 5125486"
    
    0 讨论(0)
  • 2020-12-08 18:26

    Or, since you're not looking for anything fancy like parentheses or '+', but just hyphens between numeric groups, you can:

    "0541754301".unpack('A4A3A3').join('-')
    
    0 讨论(0)
  • 2020-12-08 18:30

    You can use regular expression to reformat the string. For the example you have given:

    "0541754301".sub(/(\d{4})(\d{3})(\d{3})/, "\\1-\\2-\\3") # returns: "0541-754-301"
    
    0 讨论(0)
  • 2020-12-08 18:31

    You could use the number_to_phone(number, options = {}) method from ActionView::Helpers::NumberHelper

    However, the docs point out that this method formats a number into a US phone number (e.g., (555) 123-9876).

    Instead you could use this patch which adds the ability to provide number groupings:

    :groupings     - Specifies alternate groupings 
    (must specify 3-element array; defaults to [3, 3, 4])
    

    So in your case you would call:

    number_to_phone('0541754301', :groupings => [4, 3, 3], :delimiter => "-") 
    

    to produce:

    0541-754-301

    0 讨论(0)
提交回复
热议问题