Создание ссылки из строки - PullRequest
1 голос
/ 07 июня 2011

Я использую Ruby on Rails 3 и хотел бы извлечь из строки первый URL или адрес электронной почты , а затем использовать результирующая строка (примеры: "http://www.test.com", "mailto:test@test.com", ...) в качестве значения атрибута href, используемого в HTML <a href="resulting_string_value">Test link name</a>.

Как я могу сделать это самым безопасным способом?

PS: Я знаю метод RoR auto_link , но он не выполняет то, что мне нужно.

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Имена доменов и хостов могут содержать - или . символов, а имена пользователей электронной почты имеют системное определение. Вот средство сравнения hURL, которое пытается разделить анализ DNS.

/((https*\:\/\/)|(mailto:[^@]+@))(\/*[\w\-rb.]+)*/
0 голосов
/ 07 июня 2011

Если вы просто хотите первую ссылку в строке, вы можете просто использовать match.Кроме того, вы хотите использовать не жадное совпадение:

str.match(/mailto:([^ ]*?( |$|\n))|http:\/\/([^\/]*?)( |$|\n)/) 

Вы можете добавить дополнительную проверку на действительные адреса электронной почты и т. Д., Если хотите.

Как только вы получилистроку, вы можете использовать auto_link, чтобы сделать ссылку из нее.

0 голосов
/ 07 июня 2011

Хорошо, вам, вероятно, не нужно регулярное выражение, но оно работает, и вы можете использовать его в качестве помощника

Код для URL:

str = "http://someurl.com/"
str.scan(/http:\/\/([^\/]*)/)

Код дляэлектронные письма:

str = "mailto:someemail@email.com"
str.scan(/mailto:([^ ]*)/)

Все вместе:

result_array = str.scan(/mailto:([^ ]*)|http:\/\/([^\/]*)/)
if result_array.length > 0
  result = result[0][0] unless empty? result[0][0] 
  result = result[0][1] unless empty? result[0][1] 
end
...