-1

例如,我有一个接收输入的 api;

@message.to = params[:to]

理想情况下,应该发送输入,例如"256773485930"电话号码。但是,有些用户更喜欢发送数字,例如"+256773485930"

我尝试使用@message.to = params[:to].gsub("+", ""),但它创建了这样的输入

" 256773485930"

在新字符串上添加一个空格。我如何删除+如果它在那里而不在字符串前面添加空格?

4

3 回答 3

1

应该可以工作,gsub但输入字符串可能在前面也有一个空格,所以你可以这样做params[:to].strip.gsub("+", "")删除字符串前后的空格。

如果您只想保留数字,则更强大params[:to].gsub(/[^\d]/,"")

于 2013-10-20T08:53:28.783 回答
0

您可以String#[]使用Regexp

如果Regexp提供了 a,则返回字符串的匹配部分。

例子:

"+256773485930"[/\d+/] #=> "256773485930"
于 2013-10-20T08:56:03.710 回答
0

这是一个常见的问题。谷歌不久前开源了他们的libphonenumber,它能够解析多种格式的电话号码,然后以不同的标准化格式再次输出它们。该库被移植到名为 global_phone 的 Ruby Gem。我建议使用这个 Gem,因为它可以处理许多我们甚至可能没有想到的边缘情况。示例用法:

require 'global_phone'
GlobalPhone.db_path = 'global_phone.json'   # see Github page for more info

# somewhere else
@message.to = GlobalPhone.normalize(params[:to])

这会将每个号码转换为电话号码的标准化 E.164 国际字符串格式。虽然这意味着转换后的电话号码实际上将以 a 开头+,但这是存储电话号码的“正确”和标准方式。

于 2013-10-20T10:48:02.793 回答