Форматирование европейского телефона с использованием rails

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

С помощью rails я могу форматировать номер в номер телефона в США с помощью number_to_phone

Я использую формат using european phone, что означает, что я хочу группировать номера в следующем формате, n является переменной:

 (n*x) xxx-xxx
  

Несколько примеров

 6365555796 => (6365) 555-796

665555796  => (665) 555-796
  

Как добиться этого с помощью последней версии rails 3.0.7?

Комментарии:

1. Не могли бы вы, пожалуйста, привести пару примеров для лучшего понимания? Специально для раздела (n * x)

Ответ №1:

как насчет того, чтобы:

 def to_phone(num)
   groups = num.to_s.scan(/(.*)(d{3})(d{3})/).flatten
   "(#{groups.shift}) #{groups.shift}-#{groups.shift}"
end


irb(main):053:0> to_phone 318273612
=> "(318) 273-612"
irb(main):054:0> to_phone 3182736122
=> "(3182) 736-122"
irb(main):055:0> to_phone 31827361221
=> "(31827) 361-221"
  

Ответ №2:

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

вы пробовали validate_format_for с помощью: там вы можете написать для него конкретное регулярное выражение [см. Это]http://ruby-forum.com/topic/180192 за написание собственного помощника для него

проверьте этот драгоценный камень, вот что вам нужноhttp://github.com/floere/phony

Комментарии:

1. африди, почему бы тебе не перенести эти комментарии в свой ответ, чтобы сделать его более полным и читабельным?

Ответ №3:

Более быстрый подход:

 def to_european_phone_format(number)
  "(#{number/10**6}) #{number/10**3%10**3}-#{number%10**3}"
end
  

Комментарии:

1. приятно 😉 не является ли «% 10 **6» здесь избыточным?

2. Да, так и было. Исправлено. Спасибо 🙂