(rails)使用regexp验证URL帮助

Ton*_*ark 5 regex ruby-on-rails url-validation

我正在使用以下内容来验证URL是否有效格式化:

validates_format_of :website, :with => URI::regexp(%w(http https))
Run Code Online (Sandbox Code Playgroud)

但是,当url不以http://或开头时,它不起作用https://.是否有一些类似的方法来验证带有URI::regexp(或URI)的URL 并使其包含不以http://?开头的有效URL ?(例如,www.google.com有效,原样http://www.google.com)

nut*_*ker 7

这篇关于Daring Fireball的帖子提供了强大的正则表达式:

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Run Code Online (Sandbox Code Playgroud)

最近的一篇文章改进了它(为了清楚起见,在这里添加了NB换行符和缩进;有关解释的更多扩展版本,请参阅帖子):

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|
           www\d{0,3}[.]|
           [a-z0-9.\-]+[.][a-z]{2,4}/)
       (?:[^\s()<>]+|
          \(([^\s()<>]+|
          (\([^\s()<>]+\)))*\))+
       (?:\(([^\s()<>]+|
          (\([^\s()<>]+\)))*\)|
          [^\s`!()\[\]{};:'".,<>?«»“”‘’]))
Run Code Online (Sandbox Code Playgroud)

从我的测试来看URL::regexp,它的URI定义是松散的(虽然它确实需要http ...).

如有必要,您可以使用虚拟属性或before_save过滤器将http://URL 附加到您的网址.