2013-10-15 3 views
26

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

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 

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

ответ

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

Try:

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

Test.

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

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

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

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

С или без WWW, он должен работать. – Jenz

+0

Это не работает для всех из них :( –

+0

Спасибо, Дакелинг, это сработало. – Jenz

-3

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

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

Это не соответствует – erdogany

3

Попробуйте это:

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

http://regexr.com?36o7a

+0

Есть несколько ненужных скобок там - '... (youtube \ .com/| youtu.be | youtube). * ', и вы, вероятно, захотите избежать'. 'в' youtu.be', и вы можете захотеть поместить '/' снаружи (поэтому он включен для 'youtu .be' и 'youtube'). – Dukeling

+0

@Dukeling Спасибо, человек.' .' действительно раздражает иногда: P –

6

Я знаю, как 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\-_]+) 
+0

Если у вас есть шанс, вы можете обновить его, чтобы подтвердить https://www.youtube.com/watch/IDHERE, что действительно ? –

0

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

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

Тест: http://regexr.com/3bga2

23

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

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

Works со следующими адресами:

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 

Захваченная группа s являются:

  1. протокол
  2. подобласть
  3. домен
  4. путь
  5. код видео
  6. Строка запроса

http://regexr.com/3dj5t

+1

https://youtube.com/f oo_bar- и https://youtube.com/foo_bar и https://www.youtube.com/watch?v= недействительны URL-адреса видео YouTube, но это регулярное выражение будет соответствовать им. –

4

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

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

Тесты here.

+0

Что изменилось? Ответ phuc77 выглядит лучше. –

+1

Не все из этих тестов пройдут с использованием ответа phuc77: https://regex101.com/r/RyE7OM/2/tests. В частности, https://youtube.com/foo_bar и https://www.youtube.com/watch?v= не должны проверяться. –

1

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

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

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

Смежные вопросы