Подтвердить что ты не робот

Regex для URL-адреса youtube

Я использую следующее regex для проверки youtube видео share.

var valid = /^(http\:\/\/)?(youtube\.com|youtu\.be)+$/;
alert(valid.test(url));
return false;

Я хочу, чтобы регулярное выражение поддерживало следующие форматы URL-адресов:

http://youtu.be/cCnrX1w5luM  
http://youtube/cCnrX1w5luM  
www.youtube.com/cCnrX1w5luM  
youtube/cCnrX1w5luM  
youtu.be/cCnrX1w5luM   

Я пробовал другое регулярное выражение, но я не получаю подходящего для обмена ссылками. Может ли кто-нибудь помочь мне решить эту проблему. Спасибо заранее.

4b9b3361

Ответ 1

  • Вам не хватает www в вашем регулярном выражении
  • Второй \. должен быть необязательным (поскольку действительны как youtu.be, так и youtube)
  • + в вашем регулярном выражении допускает один или несколько из (youtube\.com|youtu\.be), а не одну или несколько диких карт
    Вам нужно использовать . для обозначения wild-card и +, чтобы указать, что вы хотите одного или нескольких из них.

Try:

^(https?\:\/\/)?(www\.youtube\.com|youtu\.?be)\/.+$

Тест.

Если вы хотите, чтобы он соответствовал URL-адресам с или без www., просто сделайте это необязательным:

^(https?\:\/\/)?((www\.)?youtube\.com|youtu\.?be)\/.+$

Если вы хотите, чтобы www.youtu.be/... также совпал, поставьте необязательный www. вне скобок:

^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$

Ответ 2

Здесь регулярное выражение, которое я использую для сопоставления и записи важных бит URL-адресов YouTube с помощью видеокодов:

^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$

Работает со следующими URL-адресами:

https://www.youtube.com/watch?v=DFYRQ_zQ-gk&feature=featured
https://www.youtube.com/watch?v=DFYRQ_zQ-gk
http://www.youtube.com/watch?v=DFYRQ_zQ-gk
//www.youtube.com/watch?v=DFYRQ_zQ-gk
www.youtube.com/watch?v=DFYRQ_zQ-gk
https://youtube.com/watch?v=DFYRQ_zQ-gk
http://youtube.com/watch?v=DFYRQ_zQ-gk
//youtube.com/watch?v=DFYRQ_zQ-gk
youtube.com/watch?v=DFYRQ_zQ-gk

https://m.youtube.com/watch?v=DFYRQ_zQ-gk
http://m.youtube.com/watch?v=DFYRQ_zQ-gk
//m.youtube.com/watch?v=DFYRQ_zQ-gk
m.youtube.com/watch?v=DFYRQ_zQ-gk

https://www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
http://www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
//www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US

https://www.youtube.com/embed/DFYRQ_zQ-gk?autoplay=1
https://www.youtube.com/embed/DFYRQ_zQ-gk
http://www.youtube.com/embed/DFYRQ_zQ-gk
//www.youtube.com/embed/DFYRQ_zQ-gk
www.youtube.com/embed/DFYRQ_zQ-gk
https://youtube.com/embed/DFYRQ_zQ-gk
http://youtube.com/embed/DFYRQ_zQ-gk
//youtube.com/embed/DFYRQ_zQ-gk
youtube.com/embed/DFYRQ_zQ-gk

https://youtu.be/DFYRQ_zQ-gk?t=120
https://youtu.be/DFYRQ_zQ-gk
http://youtu.be/DFYRQ_zQ-gk
//youtu.be/DFYRQ_zQ-gk
youtu.be/DFYRQ_zQ-gk

https://www.youtube.com/HamdiKickProduction?v=DFYRQ_zQ-gk

Захваченные группы:

  • протокол
  • субдомена
  • домен
  • путь
  • видео код
  • строка запроса

http://regexr.com/3dj5t

Ответ 3

Я знаю, что я как бы опаздываю на вечеринку на 2 года, но мне все равно нужно что-то писать и, похоже, подходит для каждого теста, который я могу на него наброситься. Должна иметь возможность ссылаться на первое совпадение ($ 1), чтобы получить идентификатор. Соответствует http, https, www и non-www, youtube.com, youtu.be,/watch? и /watch.php? на youtube.com(youtu.be не использует их), и он поддерживает сопоставление, даже если в строке URL есть другие переменные (? t = для time,? list = для плейлистов и т.д.).

(?:https?:\/\/)?(?:youtu\.be\/|(?:www\.)?youtube\.com\/watch(?:\.php)?\?.*v=)([a-zA-Z0-9\-_]+)

Ответ 4

Формат для видео YouTube изменился. Это регулярное выражение работает для всех случаев:

^(http(s)??\:\/\/)?(www\.)?((youtube\.com\/watch\?v=)|(youtu.be\/))([a-zA-Z0-9\-_])+

Тесты здесь.

Ответ 5

Попробуйте следующее:

((http://)?)(www\.)?((youtube\.com/)|(youtu\.be)|(youtube)).+

http://regexr.com?36o7a

Ответ 6

На основе многих других регулярных выражений; это лучшее, что у меня есть:

((http(s)?:\/\/)?)(www\.)?((youtube\.com\/)|(youtu.be\/))[\S]+

Test: http://regexr.com/3bga2

Ответ 7

Я попробовал это, и он отлично работает для меня.

(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'<> #]+)

Здесь вы можете проверить https://regex101.com/r/Kvk0nB/1

Ответ 8

Проверьте этот шаблон вместо:

r'(?i)(http.//|https.//)*[A-Za-z0-9._%+-]+\.\w+'