gre*_*and 1 regex ruby-on-rails
我有一个正则表达式验证网址
/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/
Run Code Online (Sandbox Code Playgroud)
虽然我知道这是不正确的,例如它不允许哈希符号,而不是抛出验证错误,它只是崩溃应用程序.它似乎也崩溃了一个独立的正则表达式测试器.
任何人都可以解释为什么?
代码上下文是在模型中使用的,用于验证用户输入的URL以呈现到页面上
validates :source_link, :format => { :with => /(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/,
:message => 'Only valid urls allowed' }, :if => :apply_validations?
Run Code Online (Sandbox Code Playgroud)
崩溃的问题在这里:
/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)/
^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
你正在嵌套量词,正则表达式有太多的可能性来找到有效的匹配.这被称为灾难性回溯
这匹配完全相同的字符串:
/(^$|^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)\/?$)/
Run Code Online (Sandbox Code Playgroud)
当它不匹配时会更快失败.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |