我有一些代码可以检查YouTube视频网址在PHP中是否有效。
<?php
$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, $vid1, $matches);
?>
它适用于此类网址,例如
https://www.youtube.com/watch?v=cpPG0bKHYKc
但它对某些网址无效,例如:
答案 0 :(得分:1)
正如你的正则表达式中的注释一样,协议和子域是可选的。允许使用任何形式的域名。正则表达式的最后一部分是遇到问题的地方。 /watch\?v=
除了&
之外的所有内容都是必需的。您的第二个网址中没有/watch
。您可以将/watch
设为可选,但然后youtube.com/anything
将被允许。我建议您在允许的格式中加入允许的格式。类似的东西:
^(?:https?://)?(?:www\.)?(?:youtube\.com/watch\?v=([^&\n]+)|youtu\.be/([a-zA-Z\d]+))$
我认为会为你做。
演示:https://regex101.com/r/TKPtPD/1
[a-zA-Z\d]+
似乎也是youtu.be
域后的有效字符。如果可以出现更多字符,则需要更新该类。