Regex url youtube

Eléphant du PHP | 447 Messages

07 avr. 2010, 15:21

Hi : )

Je suis une quiche en regex... Je compte sur votre aide pour progresser à partir du problème que voici:

l'utilisateur entre dans un formulaire l'adresse d'une vidéo sur youtube (selon ce format: http://www.youtube.com/watch?v=0ele6fFZq5o (c'est le seul format valable dans mon script parce que je me sers de cette url pour afficher la vidéo par la suite))

quelle expression régulière me permettra de déterminer si la syntaxe de l'url entrée est correct?

Je n'ai pas la moindre idée de comment écrire ça; je commencerais comme ça:
if (!preg_match('^http://youtube.com/watch?v=', $url)) { ...
Mais je vois pas quoi écrire après le "=" ...

Merci bien pour votre aide! : )
Probably (only a) Human Problem?

ViPHP
ViPHP | 5462 Messages

07 avr. 2010, 15:23


Eléphant du PHP | 447 Messages

07 avr. 2010, 15:40

Super, ça a l'air vachement bien comme outil! : )

Mais quand tu ne sais pas comment rédiger ton expression régulière, ça ne t'avance guère; comme je te l'ai dit je suis une quiche en regex...

Merci quand même pour le post et le lien, ça me servira certainement plus tard! ;)
Probably (only a) Human Problem?

ViPHP
ViPHP | 5462 Messages

07 avr. 2010, 15:44


Eléphant du PHP | 447 Messages

07 avr. 2010, 16:05

Oui ce site je connais, il est dans mes favoris! Mais si je dois attendre d'avoir appris tout ce que présente ce site ce n'est pas demain que j'arriverai à bricoler tout seul comme un grand mes regex (et auquel cas je ne viendrais pas demander de l'aide).

Merci quand même! : )
Probably (only a) Human Problem?

ViPHP
AB
ViPHP | 5818 Messages

07 avr. 2010, 16:26

Tu peux commencer plus en douceur avec ces deux pages http://www.siteduzero.com/tutoriel-3-14 ... e-1-2.html
assez facile.

Sinon pour en revenir à ton pb si tu souhaites seulement savoir si l'url commence par "http://youtube.com/watch?v="
tu peux faire simplement
if (strpos('http://youtube.com/watch?v=') === 0) echo 'ok';
Pas besoin d'expressions régulières pour si peu.

ViPHP
ViPHP | 2287 Messages

07 avr. 2010, 16:27

Hello Stef,

deux petits conseils simples pour de bons débuts en regexp :

- 1/ Avec les regexp perl (à la fois les plus performantes, et les seules recommandées aujourd'hui en php d'ailleurs), il est obligatoire utiliser un caractère délimiteur au début et à la fin du motif. Si tu as toi-même essayé le code donné plus haut (tu l'as fait, hein ??? Sinon fais-le vite... ;) ) tu as dû voir que php te signale leur absence.

Ce caractère peut être choisi presque librement, même si par habitude on utilise très souvent un /, selon le cas d'autres caractères sont de meilleurs choix (@, #...). L'important est simplement de choisir un caractère qui ne se retrouve pas dans le motif, pour s'épargner des échappements inutiles, et bien sûr que ce soit le même au début et à la fin du motif.

L'utilité de ces caractères est de séparer le motif des options PCRE qui sont écrites juste après le délimiteur de fin.

- 2/ Prends connaissance de la liste des métacaractères PCRE.
Tous les caractères qui y sont cités ont une signification particulière pour le moteur PCRE, donc si tu veux les utiliser "tels quels" dans ton motif il te faudra les échapper pour éviter qu'ils ne soient compris comme des commandes. Tu n'as pas forcément besoin de connaître toutes leurs significations par coeur (encore que, ça vient très vite avec la pratique) mais il est à la fois simple et très utile de mémoriser cette liste.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 447 Messages

07 avr. 2010, 16:56

Ok, j'y vois plus clair! Merci à tous pour vos réponses, en particulier Calim!! : )
Probably (only a) Human Problem?

Eléphant du PHP | 447 Messages

07 avr. 2010, 17:25

J'ai fait ça en suivant tes conseils AB:
if (strpos($url, 'http://youtube.com/watch?v=') === false) { ...
Mais ça me retourne false bien que j'entre une url comme http://www.youtube.com/watch?v=0ele6fFZq5o

Comment ça se fait?

Edit, résolu, j'avais pas mis les www dans ma chaine...
Probably (only a) Human Problem?