如何删除字符串中的某些字符而不创建空格

时间:2013-10-20 08:47:06

标签: ruby-on-rails ruby

我有一个接收输入的api;

@message.to = params[:to]

理想情况下应将"256773485930"之类的输入作为电话号码发送。 但是,有些用户更喜欢发送"+256773485930"

等数字

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

" 256773485930"

在新字符串上添加空格。 如果没有在字符串前面添加空格,我如何删除+

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以将String#[]Regexp

一起使用
  

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

示例:

"+256773485930"[/\d+/] #=> "256773485930"

答案 2 :(得分:0)

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

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国际字符串格式。虽然这意味着转换的电话号码实际上将以+开头,但这是存储电话号码的“正确”和标准方式。