如何逃脱 ”不使用 gsub

How to escape " without using gsub

提问人:Kaka Richaard 提问时间:7/31/2020 最后编辑:hernanvicenteKaka Richaard 更新时间:7/31/2020 访问量:96

问:

x = JSON.parse(meta[:phone_number])

output = ""(982) xxx-xxxx"]"

我只想要电话号码。

我能做到JSON.parse(meta[:phone_number]).gsub('"', '"')

这工作正常,但它与我们拥有的每个版本不兼容。

我想要一些在任何地方都有效且非常简单的东西。

html json ruby html-解析

评论

2赞 spickermann 7/31/2020
您能否提供示例输入和预期输出的列表?
2赞 max pleaner 7/31/2020
你的意思是它“与我们拥有的每个版本不兼容”?
0赞 Todd A. Jacobs 7/31/2020
使用 URI 或 CGI 标准库模块取消转义 HTML。

答:

1赞 Todd A. Jacobs 7/31/2020 #1

检查您的数据

首先,您的数据(最初发布)不会解析为规范化的电话号码。即使 HTML 实体未转义,您最终也会得到:"

"(982) xxx-xxxx"]

这在字符串中嵌入了双引号和尾随方括号。这可能不是你想要的。如果可以,请确保没有通过在 JSON 接收器而不是上游 API 中解决问题来解决问题。

使用 CGI 模块取消转义 HTML 实体

同时,如果你的目标主要是取消转义字符串中的 HTML 实体,你可以使用 Ruby 标准库中的 CGI#unescape_html 方法来做到这一点。例如,使用不带尾部方括号的更正输入字符串:

require 'cgi'

phone_str = ""(982) xxx-xxxx""
CGI.unescape_html(phone_str).delete ?"
#=> "(982) xxx-xxxx"

请注意,简单地取消转义仍然会在字符串中嵌入双引号。您可以使用 String#delete 轻松删除引号字符,但首先从数字中提取数字并规范化输出格式可能更容易。

使用 Rails Helper 规范化电话号码输出

考虑以下示例,它利用 Rails NumberHelper 模块使用非数字字符格式化从字符串中提取的数字:

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