是否有一颗宝石可以规范并格式化红宝石中的美国电话号码?

Tim*_* T. 13 ruby ruby-on-rails phone-number

我使用假冒来格式化电话号码(意思是,如果我放入xxx-xxx-xxxx它将转换为字符串,并且还告诉它是否有(1)之前将其删除).

但它真的不适用于我们的电话号码,它专为国际号码而设计.

有同等的吗?

谢谢.

http://rubygems.org/gems/phony

Jas*_*ren 20

今年早些时候,我回顾了一堆解析和格式化电话号码的红宝石宝石.他们分为若干组(见下文).TLDR:我用'手机'.它可能适合您,因为如果您的电话号码不包含,则可以指定它使用的默认国家/地区代码.

1)以美国为中心:

big-phoney(0.1.4)
phone_wrangler(0.1.3)
simple_phone_number(0.1.9)

2)取决于rails或active_record:

phone_number(1.2.0)
validates_and_formats_phones(0.0.7)

3)已经合并回主干的"电话"叉子:

elskwid-phone(0.9.9.4)
tfe-phone(0.9.9.1)

4)依靠你提前了解该地区

音素(0.1.0)

5)几乎对我有用

电话(0.9.9.3)

6)宝石名称中不包含子字符串'phone'(编辑:我看到你试过这个)

假的(1.6.1)

这些分组可能有点不公平或过时,所以请随意发表评论.我必须承认,当时有多少人部分地重新发明了这种特殊的轮子,我有点沮丧.


tad*_*man 12

我从来没有见过可靠的电话号码格式化程序,因为它很难做到正确.就在你认为自己已经看到所有东西的时候,其他一些格式也会出现并破坏它.

十位数的北美数字可能是最容易格式化的,您可以使用正则表达式,但是一旦遇到扩展,您就会遇到麻烦.不过,如果你想要,你可以自己破解它:

def formatted_number(number)
  digits = number.gsub(/\D/, '').split(//)

  if (digits.length == 11 and digits[0] == '1')
    # Strip leading 1
    digits.shift
  end

  if (digits.length == 10)
    # Rejoin for latest Ruby, remove next line if old Ruby
    digits = digits.join
    '(%s) %s-%s' % [ digits[0,3], digits[3,3], digits[6,4] ]
  end
end
Run Code Online (Sandbox Code Playgroud)

这只会将11位和10位数字换成您想要的格式.

一些例子:

formatted_number("1 (703) 451-5115")
 # => "(703) 451-5115"
formatted_number("555-555-1212")
 # => "(555) 555-1212"
Run Code Online (Sandbox Code Playgroud)

  • 在我的ruby 1.9.3中,我必须在行''(%s)%s-%s'%[digits [0,3],digits [3,3],digits []之前插入`digits = digits.join` 6,4]]` (4认同)