Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 避免空格的正则表达式_Ruby_Regex - Fatal编程技术网

Ruby 避免空格的正则表达式

Ruby 避免空格的正则表达式,ruby,regex,Ruby,Regex,我对下面的表达式有一个问题。我正在尝试使用下面的正则表达式进行URL验证: ^http(s?):\/\/(\w+\.)?[\w%\-\.$,@?^=%&:\/~\+#]+\.[\w\.$,@?^=%&:\/~\+#]+|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}+\/$ 上面的表达式允许IP地址以及http/https:。它接受url之间的空格。(). 如何限制上面表达式中的空格?不要。这不是正则表

我对下面的表达式有一个问题。我正在尝试使用下面的正则表达式进行URL验证:

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

上面的表达式允许IP地址以及
http/https:
。它接受url之间的空格。(). 如何限制上面表达式中的空格?

不要。这不是正则表达式的合适用法,而且您永远不会对所有可能的URL都正确使用它。使用实际解析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
require'URI'
URI(“http://google.com") # => #
URI(“http://ab”)35; URI::InvalidURIError:错误的URI(不是URI?):http://ab

不要这样做。这不是正则表达式的合适用法,而且您永远不会对所有可能的URL都正确使用它。使用实际解析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
require'URI'
URI(“http://google.com") # => #
URI(“http://ab”)35; URI::InvalidURIError:错误的URI(不是URI?):http://ab

只需在第一个条件中添加一个
$
(需要一个行尾):

^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。我建议使用其中一种。

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

^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。我建议使用其中一种。

你能举个例子说明一些不应该匹配的东西吗?你说它接受url之间的空格是什么意思http://example.com?我没有看到空格。你好,sawa,很抱歉,我忘了在url之间添加空格。例如(www.goog le.co m)与正则表达式不匹配:可能重复。你能举一个例子说明不应该匹配的内容吗?你说它在url之间接受空格是什么意思http://example.com?我没有看到空格。你好,sawa,很抱歉,我忘了在url之间添加空格,例如(www.goog le.co m)与正则表达式不匹配:Okey Thank meagar的可能副本。我将通过URI模块进行尝试。好的,谢谢meagar。我将尝试通过URI模块。迈克,你能建议我,哪些特殊字符允许在域中。例如(www.ex$am%ple.com)。我想限制域部分中的特殊字符。您可以使用字母(abc)、数字(123)和连字符(-)。尽管域不能以连字符开头或结尾。现在你明白为什么人们建议使用一个已经内置了所有这些知识的现有模块了。@prasad_g我最后一次要说,你做得不对,你的正则表达式被破坏了。不要使用正则表达式来执行此操作。这个您没有希望正确地执行此操作,因此不要执行此操作。使用
URI
继续你的生活。我100%同意@meagar。Mike你能给我建议一下域中允许哪些特殊字符吗。例如(www.ex$am%ple.com)。我想限制域部分中的特殊字符。您可以使用字母(abc)、数字(123)和连字符(-)。尽管域不能以连字符开头或结尾。现在你明白为什么人们建议使用一个已经内置了所有这些知识的现有模块了。@prasad_g我最后一次要说,你做得不对,你的正则表达式被破坏了。不要使用正则表达式来执行此操作。这个您没有希望正确地执行此操作,因此不要执行此操作。使用
URI
继续你的生活。我100%同意@meagar。