html - 如何在不使用 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 实体进行转义,则可以使用Ruby 标准库中的CGI#unescape_html方法来实现。例如,使用没有尾随方括号的更正输入字符串:
require 'cgi'
phone_str = ""(982) xxx-xxxx""
CGI.unescape_html(phone_str).delete ?"
#=> "(982) xxx-xxxx"
请注意,简单地取消转义仍然会使您在字符串中嵌入双引号。您可以使用String#delete轻松删除引号字符,但首先从数字中提取数字并规范化输出格式可能更容易。
使用 Rails 助手规范化电话号码输出
考虑这个例子,它利用 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 实体的需要,因为您只关心字符串中的数字。当然还有其他提取数字的方法,以及其他格式化电话号码的方法,但这肯定会让您入门。
推荐阅读
- c# - 示例应用程序的 Ignite Compute 应用程序结果不正确 - 检查示例
- java - Android:RecyclerView.SetAdapter 导致应用程序崩溃,但没有明显错误
- python - 单击停止按钮后Python中的错误
- amazon-web-services - 使用 ElasticSearch 的 AWS DynamoDB 地理空间查询
- javascript - 弹出firebase通知时应用程序出现故障
- javascript - 如何仅使用 npm 或 yarn 安装项目的对等依赖项?
- amazon-cloudformation - 从名称中获取 TargetGroupArn?
- node.js - Backtest.js“ReferenceError:未定义列表”
- node.js - 在 Node.js 中,使用 async / await 处理错误的正确方法是什么?
- mongodb - MongoDB:即使在更改块大小后也无法移动巨型块