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)
这篇关于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 附加到您的网址.