如何替换部分输入值?

时间:2011-05-04 09:14:26

标签: jquery ruby ruby-on-rails-3

我有一个输入字段,用户可以在其中发布指向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

4 个答案:

答案 0 :(得分:1)

这只会匹配您建议的4种变体,加上http://facebook.com/redbullhttps://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