如何在不使用gsub的情况下逃脱"


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实体,因为您只关心字符串中的数字。当然还有其他方法可以提取数字,也有其他方法可以格式化电话号码,但这肯定会让你开始。

相关内容