我必须创建一个文本框,只允许你管视频的网址。
为了在服务器端处理验证,我使用below code
$rx = '~
^(?:https?://)? # Optional protocol
(?:www\.)? # Optional subdomain
(?:youtube\.com|youtu\.be) # Mandatory domain name
/watch\?v=([^&]+) # URI with video id as capture group 1
~x';
$has_match = preg_match($rx, $url, $matches);
字符串
我正在寻找客户端验证的相同解决方案。我找到了<input type="url">
here,但似乎它只适用于html5浏览器。
是否可以使用文本框进行客户端验证,以便与所有浏览器兼容?
谢谢
6条答案
按热度按时间jvidinwx1#
下面是验证youtube url的代码-
字符串
Fiddle URL:https://jsfiddle.net/cpjushnn/12/
sg3maiej2#
请看这个工作示例:
字符串
小提琴:http://jsfiddle.net/3ouq9u3v/13/
ru9i0ody3#
**再次更新此.(再次07/September/2022)**正如我所看到的,有7个场景,以满足我到目前为止已经确定(我编造了这些名字):
普通网址
1.第一个月
分享网址
https://youtu.be/12345678901
个带开始时间的共享URL
https://youtu.be/12345678901?t=6
个移动的浏览器url
https://m.youtube.com/watch?v=12345678901&list=RD12345678901&start_radio=1
个长URL
https://www.youtube.com/watch?v=12345678901&list=RD12345678901&start_radio=1&rv=smKgVuS
个带开始时间的长url
https://www.youtube.com/watch?v=12345678901&list=RD12345678901&start_radio=1&rv=12345678901&t=38
个Youtube短片
https://youtube.com/shorts/12345678901
个我最初提供了一个基于Jitendras答案的扩展答案,因为它似乎有一些差距。例如,对于较短的共享URL,如
https://youtu.be/abcdefgh_ij
,如果您在末尾添加字符,Jitendras不会捕获它。此外,如果用户在文本字段中删除了错误,则不会删除该值。然而,我假设原始发帖者实际上想在iframe嵌入中使用URL,这里的答案都不适用。嵌入的URL格式不同,需要处理。
下面是我正在做的事情,接受用户输入,验证它,用一个正确格式的可嵌入URL替换它,然后将它分配给一个iframe以显示在UI上。
注意事项:下面将处理所有上述,但它不会显示所有上述.即它会格式化一个起始时间的网址嵌入它,但你会失去起始时间.但一个小的自定义我相信你可以处理.
可能对某些人有好处....
字符串
...
型
**注1:**我知道上面的内容并不漂亮。我还没有时间整理它,去掉所有的“如果”,但希望它提供了足够的背景,是有用的
**注2:**请注意您使用的视频。YouTube不允许嵌入具有版权背景音乐的视频,它们将显示为不可用。
lkaoscv74#
结合这里的答案和一些修改,我得出了这个正则表达式:
字符串
这将匹配任何格式,但将不匹配,如果id长于11个字符。也可以添加开始视频标签与“?”部分结束。
你可以通过粘贴into this来测试它
wnavrhmk5#
转义正则表达式中的所有正斜杠,然后将修改后的正则表达式放在
/
中,不带任何空格或注解行,也不需要添加x
修饰符。字符串
bf1o4zei6#
Credits:RegEx:摘自this post Variations of YT urls摘自:@DMur's post
正则表达式
字符串
支持以下URL格式
型
但要小心,这是不完美的,特别是在视频id后,你可以添加任何东西
你可以查here