Ruby on rails 正则表达式崩溃rails应用程序

Ruby on rails 正则表达式崩溃rails应用程序,ruby-on-rails,regex,Ruby On Rails,Regex,我有一个验证URL的正则表达式 /(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/ 虽然我知道这在某种意义上是不正确的,例如,它不允许使用哈希符号,而不是抛出验证错误,它只是使应用程序崩溃。它似乎也使独立的正则表达式测试程序崩溃 用于测试的URL为 有人能解释为什么吗 代码上下文是在模型中使用的,用于验证用户输入的要呈现到页面上的URL validates :source_link, :format =&g

我有一个验证URL的正则表达式

/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/
虽然我知道这在某种意义上是不正确的,例如,它不允许使用哈希符号,而不是抛出验证错误,它只是使应用程序崩溃。它似乎也使独立的正则表达式测试程序崩溃

用于测试的URL为

有人能解释为什么吗

代码上下文是在模型中使用的,用于验证用户输入的要呈现到页面上的URL

validates :source_link, :format => { :with => /(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/,
                                   :message => 'Only valid urls allowed' }, :if => :apply_validations?

使事情崩溃的问题是:

/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/
                                                 ^^^^^^^^^^^^^^
您正在嵌套量词,正则表达式在这里有太多的可能性来找到有效的匹配项。这叫做

这完全匹配相同的字符串:

/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)\/?$)/

当它不匹配时,会更快地失败。

导致崩溃的问题在于:

/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/
                                                 ^^^^^^^^^^^^^^
您正在嵌套量词,正则表达式在这里有太多的可能性来找到有效的匹配项。这叫做

这完全匹配相同的字符串:

/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)\/?$)/

当它不匹配时,会更快地失败。

这应该可以做到:

^(?:https?:\/\/)?(?:[\da-z\.-]+)\.(?:[a-z\.]{2,6})(?:[\/\w \.#=-]*)\/?$
虽然我高度怀疑这是否是匹配URL的“好”,但我建议看看其他答案


在线,.这应该可以完成以下工作:

^(?:https?:\/\/)?(?:[\da-z\.-]+)\.(?:[a-z\.]{2,6})(?:[\/\w \.#=-]*)\/?$
虽然我高度怀疑这是否是匹配URL的“好”,但我建议看看其他答案


联机,.

这没有多大帮助,您需要显示正则表达式所使用的上下文,否则我们无法帮助您。有很多方法可以使应用程序崩溃,但单个正则表达式字符串并不是其中之一。请参见我的编辑,我添加了上下文谢谢,我对您提供有用答案的方法不太熟悉,但响应和改进您的问题会得到我的投票。这不是很有帮助,您需要显示正则表达式所使用的上下文,否则我们无法帮助您。有很多方法可以使应用程序崩溃,单个正则表达式字符串并不是其中之一。请参阅我的编辑,我添加了上下文谢谢,我不太熟悉您提供有用答案的方法,但是响应和改进您的问题会得到我的投票。