正则表达式Youtube URL

时间:2011-11-29 06:53:04

标签: regex youtube

我正在使用此正则表达式验证youtube网址。

^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:\S+)?$

效果很好。

但我对此有疑问。

如果用户输入http://www.youtube.com/watch?v=zcKEjSYJVLs&feature=topvideos_sports,则可以正常使用

现在我想避免这个

http://www.youtube.com/watch?v=zcKEjSYJVLs&feature=topvideos_sportshttp://www.youtube.com/watch?v=zcKEjSYJVLs&feature=topvideos_sportshttp://www.youtube.com/watch?v=zcKEjSYJVLs&feature=topvideos_sports

多次粘贴相同的网址(在我们的案例中为三次)。对于此正则表达式,它也是有效的YouTube地址。

我正在寻找解决方法。

6 个答案:

答案 0 :(得分:8)

不要在第一个之后允许另一个?

^http:\/\/(?:www\.)?youtube.com\/watch\?(?=[^?]*v=\w+)(?:[^\s?]+)?$

应该转义查询参数中的实际?,因此此方法不应排除任何有效的网址。

答案 1 :(得分:2)

^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?!\S+http:\/\/)(?:\S*)$

应该做的伎俩!

在实际匹配字符串上剩余的内容之前使用否定前瞻。 :)

答案 2 :(得分:1)

怎么样?
^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:(?:\S(?!http))+)?$

here on Regexr

我将最后一部分(?:\S+)?更改为(?:(?:\S(?!http))+)?,这意味着,只有当其后面没有“http”(\S时才匹配下一个非空白字符((?!http)) )

答案 3 :(得分:1)

如果你只关心双贴,那么也许试试这个ReGex(基地唐@ stema的答案):

^http:\/\/(?:www\.)?youtube\.com\/watch\?(?=.*v=\w+)(?:(?:\S(?!.{0,}youtube\.com‌​.{0,}))+)?$

答案 4 :(得分:1)

Ruby on Rails 4抱怨使用^和$因为可能的脚本注入可能性。在此编辑它以避免该警告以及接受https

/\Ahttps?:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?:\S+)?\z/

答案 5 :(得分:1)

youtube网址主要是两种类型

http://www.youtube.com/watch?v=zcKEjSYJVLs&feature=topvideos_sports

https://youtu.be/zcKEjSYJVLs

在红宝石中验证这一点很简单

if (youtube_url.include?("youtube.com") || youtube_url.include?("youtu.be"))
   statement
end

如果您希望通过正则表达式进行验证,请使用此

/^http[s]*:\/\/[www\.]*youtu[.]{1}*be[.com]{4}*\/[watch\?v=]*([a-zA-Z0-9_-]*)/

谢谢