0

管理者が電子メール本文のさまざまな部分にテキストを入力するためのいくつかのテキスト領域ボックスを持っている自動レポート ツール (企業イントラネット) があります。

私がやりたいのは、テキスト領域のコンテンツを解析し、見つかったハイパーリンクをリンク タグでラップすることです (レポートが出力されると、テキスト URL の代わりにリンクが表示されます)。

テキストを解析して見つかった (['http:','https:','ftp:] TO の後に最初のスペースに) リンクタグを追加する方法を考え出さずに、このようなことを行う簡単な方法はありますか?

ありがとう!ルビー 1.87、レール 2.3.5

4

2 に答える 2

0

目標を達成する方法はたくさんあります。1 つの方法は、正規表現を使用することです。正規表現について聞いたことがない場合は、このウィキペディアのエントリですぐに理解できるはずです。

例えば:

content_string = "Blah ablal blabla lbal blah blaha http://www.google.com/ adsf dasd dadf dfasdf dadf sdfasdf dadf dfaksjdf kjdfasdf http://www.apple.com/ blah blah blah."
content_string.split(/\s+/).find_all { |u| u =~ /^https?:/ }

どちらが返されますか:["http://www.google.com/", "http://www.apple.com/"]

さて、問題の後半では、上記で返された配列を使用して、ハイパーリンクをテキスト リンクに置き換えます。

links = ["http://www.google.com/", "http://www.apple.com/"]
links.each do |l|
  content_string.gsub!(l, "<a href='#{l}'>#{l}</a>")
end

content_stringすべての http/https URL の HTML ハイパーリンクを含むように更新されます。

前述したように、この問題に取り組む方法は数多くあります。URL を見つけるには、次のようにすることもできます。

require 'uri'
URI.extract(content_string, ['http', 'https'])

これがお役に立てば幸いです。

于 2012-05-17T04:47:53.293 に答える
0

ヘルパーを作成します:

def make_urls(text)
  urls = %r{(?:https?|ftp|mailto)://\S+}i
  html_text = text.gsub urls, '<a href="\0">\0</a>'
  html_text
end

ビューでこの関数を呼び出すだけで、期待される出力が得られます。お気に入り :

irb(main):001:0> string = 'here is a link: http://google.com'
=> "here is a link: http://google.com"
irb(main):002:0> urls = %r{(?:https?|ftp|mailto)://\S+}i
=> /(?:https?|ftp|mailto):\/\/\S+/i
irb(main):003:0> html = string.gsub urls, '<a href="\0">\0</a>'
=> "here is a link: <a href=\"http://google.com\">http://google.com</a>"
于 2012-05-17T05:11:29.253 に答える