例如,我有一个接收输入的 api;
@message.to = params[:to]
理想情况下,应该发送输入,例如"256773485930"
电话号码。但是,有些用户更喜欢发送数字,例如"+256773485930"
我尝试使用@message.to = params[:to].gsub("+", "")
,但它创建了这样的输入
" 256773485930"
在新字符串上添加一个空格。我如何删除+
如果它在那里而不在字符串前面添加空格?
例如,我有一个接收输入的 api;
@message.to = params[:to]
理想情况下,应该发送输入,例如"256773485930"
电话号码。但是,有些用户更喜欢发送数字,例如"+256773485930"
我尝试使用@message.to = params[:to].gsub("+", "")
,但它创建了这样的输入
" 256773485930"
在新字符串上添加一个空格。我如何删除+
如果它在那里而不在字符串前面添加空格?
应该可以工作,gsub
但输入字符串可能在前面也有一个空格,所以你可以这样做params[:to].strip.gsub("+", "")
删除字符串前后的空格。
如果您只想保留数字,则更强大params[:to].gsub(/[^\d]/,"")
这是一个常见的问题。谷歌不久前开源了他们的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 开头+
,但这是存储电话号码的“正确”和标准方式。