(Uitgebreid) Filteren van URL met PHP

Status
Niet open voor verdere reacties.

RBPN

Gebruiker
Lid geworden
29 mei 2008
Berichten
17
Dag mensen,

Ik wil dat mensen in een formulier een youtube URL kunnen posten. Alles lukt wel maar één ding lukt me nog niet, namelijk om te zorgen dat ze alleen youtube URL's kunnen toevoegen. Ik weet hoe je met een bepaalde functie een URL kan filteren maar ik wil er voor zorgen dat dus het eerste gedeelte "http://www.youtube.com/watch?v=" is en dat daarna nog een 11 letterige/cijferige code komt, bijvoorbeeld oHg5SJYRHA0. Dus dat bij http://www.youtube.com/watch?v=oHg5SJYRHA0 het gedeelte tot en met ?v= bij elke link erin moet zitten de laatste 11 maakt niet uit. Weet iemand hoe ik dat kan aanpakken?

Alvast bedankt!
 
Makkelijkst is waarschijnlijk met preg_match. Ik kan je een aanzetje geven, maar ik weet ook niet bijster veel van regular expressions.

PHP:
$sCorrectUrl = 'http://www.youtube.com/watch?v=oHg5SJYRHA0';
$sIncorrectUrl1 = 'http://www.myspace.com/watch?v=oHg5SJYRHA0';
$sIncorrectUrl2 = 'http://www.youtube.com/watch?v=oHgA0';

if ( preg_match ( '/^http://youtube.com/watch?v=[A-Za-z0-9]{11}$/', $sCorrectUrl ) ) {
  echo '$sCorrectUrl is correct';
} else {
  echo '$sCorrectUrl is niet correct';
}

if ( preg_match ( '/^http://youtube.com/watch?v=[A-Za-z0-9]{11}$/', $sIncorrectUrl1 ) ) {
  echo '$sIncorrectUrl1 is correct';
} else {
  echo '$sIncorrectUrl1 is niet correct';
}

if ( preg_match ( '/^http://youtube.com/watch?v=[A-Za-z0-9]{11}$/', $sIncorrectUrl2 ) ) {
  echo '$sIncorrectUrl2 is correct';
} else {
  echo '$sIncorrectUrl2 is niet correct';
}

Dit geeft als het goed is:

$sCorrectUrl is correct
$sIncorrectUrl1 is niet correct
$sIncorrectUrl2 is niet correct

Maar ik kan er een beetje naast zitten met de regexp.
 
Ik heb erg veel aan j hulp gehad, vooral aan preg_match. Ik heb nu dit:

PHP:
if (!preg_match('/http://www.youtube.com/watch?v=/', $LinkVideo)) 
{
$errors[] = 'Please enter a valid Youtube URL';
}

if (!strlen ($LinkVideo) == 42)
{
$errors[] = 'Please enter a valid Youtube URL';
}

Maar het werkt nog niet helemaal, volgens mij komt dat door de slashes in de youtube link. Maar hoe kan ik dat verhelpen? Wat moet ik op de plaats van de slash zetten?
 
Waarom doe je het niet op Eriks manier? Dat is veel handiger.
 
Ik heb die manier net ook geprobeerd maar die werkt niet om dezelfde reden. Ik krijg deze foutmelding:

Warning: preg_match() [function.preg-match]: Unknown modifier '/' in ---bestand--- on line 40

Ik denk dat ik de / in de link moet veranderen voor een ander teken ofzo...

Ik weet het eigenlijk wel zeker want als ik de link in de pregmatch verander voor een gewoon woord zonder slash, dan werkt het wel...
 
Laatst bewerkt:
En zo?

if ( preg_match ( '/^http:\/\/youtube.com\/watch?v=[A-Za-z0-9]{11}$/', $sCorrectUrl ) ) {
 
ik heb nog steeds als ik dit gebruik:

PHP:
if (!preg_match( '/^http:\/\/www.youtube.com\/watch?v=[A-Za-z0-9]{11}$/', $LinkVideo ) ) 
{
$errors[] = 'Please enter a valid Youtube URL';
}

en ik voer dit in http://www.youtube.com/watch?v=oHg5SJYRHA0

Dan krijg ik terug dat hij niet correct is...

Update:

Het is gelukt, dit moest hem zijn:

if (!preg_match('/http:\/\/www.youtube.com\/watch\?v\=[A-Za-z0-9]{11}$/', $LinkVideo))
{
$errors[] = 'Please enter a valid Youtube URL';
}

Zo werkt hij wel. Heel erg bedankt voor jullie hulp!
 
Laatst bewerkt:
Even voor de zekerheid; zo ook niet?

PHP:
if (!preg_match( '/^http:\/\/www.youtube.com\/watch?v=[A-Za-z0-9]{11}$/', 'http://www.youtube.com/watch?v=oHg5SJYRHA0' ) )
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan