0

我有这个帮手:

  def markdown(text)
    CommonMarker.render_html(text.to_s, :HARDBREAKS, [:autolink]).html_safe
  end

但我想要电话号码+33 7 87 12 10 21来呈现tel:链接。

我弄清楚了正则表达式:

PHONE_NUMBER_REGEXP = /\+?[ 0-9()-]+[0-9)]/

但我找不到如何与 CommonMarker https://github.com/gjtorikian/commonmarker集成

好像我需要创建一个自定义渲染器https://github.com/gjtorikian/commonmarker#creating-a-custom-renderer

我也试过:

text.gsub(PHONE_NUMBER_REGEXP) { |match| "[#{match}](tel:#{match})" }

没有成功

4

1 回答 1

0

放弃了尝试扩展 CommonMarker 并仅对 html 输出进行 gsub 处理,效果很好并且由于转义而安全:

module ApplicationHelper
  PHONE_NUMBER_REGEXP = /\+?[ 0-9()-]{9,}[0-9)]/

  def markdown(text)
    html = CommonMarker.render_html(text.to_s, :HARDBREAKS, [:autolink]).html_safe
    html.gsub(PHONE_NUMBER_REGEXP) do |match|
      "<a href=\"tel:#{h(match)}\">#{h(match)}</a>"
    end.html_safe
  end
于 2021-04-11T09:39:57.140 回答