x = JSON.parse(meta[:phone_number])
output = ""(982) xxx-xxxx"]"
我只想要电话号码。
我可以做这个JSON.parse(meta[:phone_number]).gsub('"', '"')
这很好用,但并不是与我们所有的版本都兼容。
我想要一个在任何地方都能工作并且非常简单的东西。
检查您的数据
首先,您的数据(最初发布的(无法解析为标准化的电话号码。即使HTML实体"
未显示,您最终也会得到:
"(982) xxx-xxxx"]
这在字符串中嵌入了双引号和尾部方括号。这可能不是你想要的。如果可以的话,通过在JSON接收器中而不是在上游的API中解决这个问题,确保你没有对这个问题进行包扎。
使用CGI模块取消HTML实体的标题
同时,如果您的目标主要是在字符串中对HTML实体进行unescape,那么您可以使用Ruby标准库中的CGI#unescape_HTML方法来实现这一点。例如,使用不带后方括号的校正输入字符串:
require 'cgi'
phone_str = ""(982) xxx-xxxx""
CGI.unescape_html(phone_str).delete ?"
#=> "(982) xxx-xxxx"
请注意,简单地取消捕获仍然会在字符串中嵌入双引号。使用String#delete可以很容易地删除引号字符,但首先从数字中提取数字并规范化输出格式可能更容易。
使用Rails助手规范电话号码输出
考虑这个例子,它利用RailsNumberHelper模块来格式化从具有非数字字符的字符串中提取的数字:
require 'action_view/helpers/number_helper'
include ActionView::Helpers::NumberHelper
phone_str = ""(982) 555-1212"]"
number_to_phone phone_str.delete("^0-9"), area_code: true
#=> "(982) 555-1212"
这根本不需要处理HTML实体,因为您只关心字符串中的数字。当然还有其他方法可以提取数字,也有其他方法可以格式化电话号码,但这肯定会让你开始。