0

我对下面的表达式有一个问题。我正在尝试使用下面的正则表达式进行 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 )。如何限制上述表达式中的空格?

4

2 回答 2

4

不。这不适合使用正则表达式,而且您永远无法正确处理所有可能的 URL。使用URI 模块实际解析 URL,并捕获如果您向其提供无效 URL 将引发的异常。

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
于 2013-07-23T16:08:13.217 回答
0

只需在$您的第一个条件中添加一个(需要行结束):

^http(s?):\/\/(\w+\.)?[\w%\-\.$,@?^=%&amp;:\/~\+#]+\.[\w\.$,@?^=%&amp;:\/~\+#]+$|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}+\/$
   ------Add in $ here---------------------------------------------------------^

例子

话虽如此,已经有非常擅长解析和验证 URI的内置模块。我建议使用其中之一。

于 2013-07-23T16:35:58.883 回答