我对下面的表达式有一个问题。我正在尝试使用下面的正则表达式进行URL验证:
^http(s?):\/\/(\w+\.)?[\w%\-\.$,@?^=%&:\/~\+#]+\.[\w\.$,@?^=%&:\/~\+#]+|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}+\/$
上面的表达式允许IP地址以及http/https:
。它接受url之间的空格。 (http://example.com)。如何限制上面表达式中的空格?
答案 0 :(得分:4)
别。这不适合使用正则表达式,并且永远不会使所有可能的URL正确。使用URI module实际解析网址,并捕获如果您向其提供无效网址时将引发的例外情况。
require 'URI'
URI("http://google.com") # => #<URI::HTTP:0x007fb08500d3a8 URL:http://google.com>
URI("http://a b") # URI::InvalidURIError: bad URI(is not URI?): http://a b
答案 1 :(得分:0)
只需将$
(要求换行)添加到第一个条件中:
^http(s?):\/\/(\w+\.)?[\w%\-\.$,@?^=%&:\/~\+#]+\.[\w\.$,@?^=%&:\/~\+#]+$|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}+\/$
------Add in $ here---------------------------------------------------------^
话虽如此,在解析和验证URI时,已经有非常好的内置模块。我建议使用其中之一。