如何查看YouTtube视频网址现在正在验证?

时间:2016-12-19 01:00:36

标签: php regex youtube vimeo

我有一些代码可以检查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

但它对某些网址无效,例如:

https://youtu.be/auz2t9nBcwU

1 个答案:

答案 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域后的有效字符。如果可以出现更多字符,则需要更新该类。