我有一个输入字段,用户可以在其中发布指向Facebook页面的链接。现在我正在使用正则表达式来验证URL。
URL_regex = /\A(http|https|ftp):\/\/([\w]*)\.([\w]*)\.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)(\.[a-z]{1,3})?/i
我只希望以下四个版本通过验证:
https://www.facebook.com/redbull
http://www.facebook.com/redbull
www.facebook.com/redbull
facebook.com/redbull
然后我想只想在数据库中存储“redbull”部分。我试过Rubular,但我无法弄清楚正则表达式的逻辑。
提前致谢
找到了一个解决方案,对于caley:
URL_regex = /\A((http|https):\/\/)?(www\.)?facebook\.com\/([\S]+)/i
答案 0 :(得分:1)
这只会匹配您建议的4种变体,加上http://facebook.com/redbull
和https://facebook.com/redbull
,因为它们也可能是常见变体。
/\A((http|https):\/\/)?(www\.)?facebook\.com\/(\w*)?/i
答案 1 :(得分:1)
你已经为正则表达式提供了很好的答案,但我想指出URI
模块:
>> require 'uri'
#=> true
>> uri = URI.parse "https://www.facebook.com/redbull"
#=> #<URI::HTTPS:0x000001010a41a8 URL:https://www.facebook.com/redbull>
>> uri.scheme
#=> "https"
>> uri.host
#=> "www.facebook.com"
>> uri.path
#=> "/redbull"
也许验证单个部分比一个大正则表达式更容易。
答案 2 :(得分:0)
如果没有RegEx,您可以使用它:
var your_url = ''; //here, you place your URL
console.log(your_url.slice(your_url.lastIndexOf('/') + 1));
这将提供所需的输出。
答案 3 :(得分:0)
你快到了。您只需要添加另一个捕获组。
\A(http|https|ftp):\/\/([\w]*)\.([\w]*)\.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)\/(\w+)?
或
(http|https:ftp:\/\/)?\w*.\w+.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)\/(\w+)
irb(main):014:0> if x =~ /\A(http|https|ftp):\/\/([\w]*)\.([\w]*)\.(com|net|org|biz|info|mobi|us|cc|bz|tv|ws|name|co|me)\/(\w+)?/
irb(main):015:1> puts $5
irb(main):016:1> end
redbull
=> nil