【发布时间】:2017-04-06 06:45:29
【问题描述】:
我正在使用 Ruby 2.3.0 和 Rails 4.2.5,我正在关注此文档 https://www.sitepoint.com/youtube-rails/ 由于这里有正则表达式用于验证 youtube 网址。我将它复制粘贴到我的 Rails 应用程序中,它在 Rails 控制台上工作正常
[1] pry(main)> YT_LINK_FORMAT = /^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/
=> /^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/
[2] pry(main)> video_url = "https://www.youtube.com/watch?v=aZngT1Eas4w"
=> "https://www.youtube.com/watch?v=aZngT1Eas4w"
[3] pry(main)> uid = video_url.match(YT_LINK_FORMAT)
=> #<MatchData "https://www.youtube.com/watch?v=aZngT1Eas4w" 1:"aZngT1Eas4w">
[4] pry(main)> uid[2]
=> nil
[5] pry(main)> uid[1]
=> "aZngT1Eas4w"
[6] pry(main)> video_url = "https://youtu.be/aZngT1Eas4w"
=> "https://youtu.be/aZngT1Eas4w"
[7] pry(main)> uid = video_url.match(YT_LINK_FORMAT)
=> #<MatchData "https://youtu.be/aZngT1Eas4w" 1:"aZngT1Eas4w">
[8] pry(main)> uid[1]
=> "aZngT1Eas4w"
但是当我运行我的 rails 应用程序时,我得到了这个错误
"The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?"
我也在尝试使用这个正则表达式
/^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/
=> /^(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/
但同样的问题仍然存在
【问题讨论】:
-
/\A(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/(?:watch\?v=)?([\w-]{10,})/原因是 Rails 试图阻止你注入。 -
如果我将 ^ 替换为 \A 那么对于像这样的任何 url 'aaaaa.com/watch?v=o3m2F6CDktc'
-
我试试你的 '/\A(?:https?:\/\/)?(?:www\.)?youtu(?:\.be|be\.com)\/ (?:watch\?v=)?([\w-]{10,})/' 但它不起作用
标签: ruby-on-rails ruby