[PHP] Regular expression URL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • c-nan
  • Registratie: Juni 2008
  • Laatst online: 22:51
Ik probeer een regexp in elkaar te zetten om youtube URL's te kunnen controleren/filteren.

Na veel Googlen, proberen, rondvragen, heb ik het volgende:
PHP:
1
2
3
$videoLink = 'http://www.youtube.com/watch?v=QWryt7fg';

print ' test: ' . preg_match('(^bhttp:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=[a-zA-Z0-9-_]+)(?:\S+)?$)', $videoLink);


Echter geeft deze false terug, dus hij klopt nog niet helemaal.

Bedoeling is dat het altijd moet beginnen met:
http://(www.)youtube.com/watch?v=

Achter de 'v=' is enkel toegestaan:
a-z, A-Z, 0-9, -, _

Soms bevat de URL meerdere waarden, dan alleen 'v', bijvoorbeeld:
http://w ww.youtube.com/watch?v=L5vR-UR5nOE&feature=related
http://w ww.youtube.com/watch?v=LipvtaK41mw&feature=g-logo&context=G210ac1dFOAAAAAAACAA

Deze moeten ook er door heen komen als true.

Waar ik vervolgens naar toe wil is dat een lange URL (zie 2 hierboven) gecontroleerd wordt door de regexp en gestript wordt naar een verkorte URL, namelijk:
http://w ww.youtube.com/watch?v=L5vR-UR5nOE&feature=related moet dus worden:
http://w ww.youtube.com/watch?v=L5vR-UR5nOE

http://w ww.youtube.com/watch?v=LipvtaK41mw&feature=g-logo&context=G210ac1dFOAAAAAAACAA moet dus worden:
http://w ww.youtube.com/watch?v=LipvtaK41mw

Maar het belangrijke is nu even dat de regexp klopt.

Ik ben een leek op het gebied van regexp :$

[ Voor 14% gewijzigd door c-nan op 11-03-2012 12:23 ]

EU DNS: 86.54.11.100


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
parse_url() :
controleer host en begin van path en zoek in query.

0 regexen nodig. Epische leesbaarheid. Zoete overwinning.

{signature}


Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 00:44

orf

Voutloos schreef op zondag 11 maart 2012 @ 12:26:
parse_url() :
controleer host en begin van path en zoek in query.

0 regexen nodig. Epische leesbaarheid. Zoete overwinning.
In combinatie met parse_str(). :)

edit: let trouwens ook even op youtu.be linkjes. Die hebben geen query in de url, maar als path.

[ Voor 15% gewijzigd door orf op 11-03-2012 12:28 ]


Acties:
  • 0 Henk 'm!

  • Gtoniser
  • Registratie: Januari 2008
  • Laatst online: 21:41
Wat hierboven staat.

Voor het geval je toch regex wilt (kan redenen hebben):

Ik gebruik zelf deze om het YouTube ID af te vangen:
PHP:
1
preg_match('/(youtube\.com\/v\/|youtu\.be\/|youtube\.com\/watch\/?\?\S*?v=)([^&\s]*)/i',$videourl);

Acties:
  • 0 Henk 'm!

  • c-nan
  • Registratie: Juni 2008
  • Laatst online: 22:51
Gtoniser schreef op zondag 11 maart 2012 @ 12:28:
Wat hierboven staat.

Voor het geval je toch regex wilt (kan redenen hebben):

Ik gebruik zelf deze om het YouTube ID af te vangen:
PHP:
1
preg_match('/(youtube\.com\/v\/|youtu\.be\/|youtube\.com\/watch\/?\?\S*?v=)([^&\s]*)/i',$videourl);
Ik zal eens kijken wat het doet. Thanks.

Hoe bedoelen jullie met parse url, wat als er heel wat anders is ingevoerd dan youtube.com? De domain dus ook controleren?

/edit
Bovenstaande script werkt helaas niet helemaal.
Als ik ?v=QWry%$# meegeef, matched hij ook, terwijl al @$%# etc niet is toegestaan.

[ Voor 12% gewijzigd door c-nan op 11-03-2012 12:33 ]

EU DNS: 86.54.11.100


Acties:
  • 0 Henk 'm!

  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 14-08 12:22

Wiethoofd

Broadcast TOM

Explode de $_GET parts op de & en je hebt heel makkelijk je 'v=' video-id. Let wel op dat je ook de # references naar comment-id's en/of tijdstippen in de video stript.

Volg me op Twitter/X & Bluesky


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Polat06 schreef op zondag 11 maart 2012 @ 12:30:
/edit
Bovenstaande script werkt helaas niet helemaal.
Als ik ?v=QWry%$# meegeef, matched hij ook, terwijl al @$%# etc niet is toegestaan.
Als je de gegeven regex goed bekijkt, moet je hier eerlijk gezegd wel zelf uit moeten komen hoor. Nu vraag je binnen een paar minuten of iemand anders het ff voor je oplost. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • Gtoniser
  • Registratie: Januari 2008
  • Laatst online: 21:41
Polat06 schreef op zondag 11 maart 2012 @ 12:30:
Bovenstaande script werkt helaas niet helemaal.
Als ik ?v=QWry%$# meegeef, matched hij ook, terwijl al @$%# etc niet is toegestaan.
PHP:
1
preg_match('/(youtube\.com\/v\/|youtu\.be\/|youtube\.com\/watch\/?\?\S*?v=)([a-z0-9_\-]*)/i',$videourl);
zoiets dan (niet getest :P)

Acties:
  • 0 Henk 'm!

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 21:07
Polat06 schreef op zondag 11 maart 2012 @ 12:30:
Hoe bedoelen jullie met parse url, wat als er heel wat anders is ingevoerd dan youtube.com? De domain dus ook controleren?
Parse_url met de query filter geeft alleen nog het query gedeelte mee (dus v=xxx&bla=bla) en als je daar dan parse_str overgooit wordt dat mooi in stukken gehakt, zodat je dan een simpele regex kunt toepassen op het "v" gedeelte, en ook gemakkelijker de URL kunt inkorten :)
Pagina: 1