2013-10-11 32 views
2

這種情況還沒有問題。 我wan't檢測一個字符串中包含的任何鏈接,即HTTP,FTP,HTTPS的所有組合,和WWW,等使用正則表達式檢測字符串中的任何*鏈接?

基本上我想阻止字符串包含任何鏈接。

我目前使用的:

name.split(/\s+/).find_all { |u| u =~ /^https?:/ }).count 

什麼是防止串的任何鏈接的最佳方式?

+1

您是在談論HTML鏈接(標籤)還是隻是一個URL字符串? – MrYoshiji

+0

分割空白,然後搜索,你沒有利用正則表達式的力量。這比較好:'如果名字=〜/ \ bhttps?:/'失敗,雖然這不會捕獲所有的鏈接情況。 Idk您的要求是什麼 - 「www.example.com」是否包含在內? 「example.com」如何?如果是這樣,這是無望的,因爲有太多的域名和維護將是一個噩夢 –

+0

你可以用regexen做到這一點,但如果你的目標是阻止用戶顯示這樣的鏈接,他們將會找到一種方法來規避這種情況。例如:h t t p:// s t a c k o v e r f o o w。 com –

回答

3

我最終使用:

errors.add(:name, "Your name cannot contain links") if name.match /\b(?:(?:mailto:\S+|(?:https?|ftp|file):\/\/)?(?:\w+\.)+[a-z]{2,6})\b/ 

其中一期工程在幾乎所有的情況相當不錯。 從幾個來源在線攻擊

相關問題