我正在使用此正则表达式验证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地址。
我正在寻找解决方法。
答案 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))+)?$
我将最后一部分(?:\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
或
在红宝石中验证这一点很简单
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_-]*)/
谢谢