2010-11-30 6 views
0

Je suis actuellement en train de construire un CMS pour mes projets et j'essaye de router vers mon contrôleur 'Admin'. Maintenant, ma regexp est:PHP regex pour admin, admin/et admin/more/etc

'admin(.*)' 

Mais avec tout ce qui commence par 'admin' sera apparié. Je voudrais faire correspondre la route quand 'admin', 'admin/foo' et 'admin/foo/bar' etc, est présent. Pas quand 'adminn' ou quelque chose comme ça.

J'espère que vous comprendrez ce que je veux. Thx/Tobias

Répondre

3

Alter regex comme ceci:

admin(\/.*)? 
+0

C'est ce que je cherchais, je vous remercie Alin :) – sandelius

0

Pour la chaîne, comme admin/foo/bar/salami/pizza, comment preg_match('~^admin\/~', $string) au sujet?

Deux approches
+0

Que diriez-vous juste pour 'admin'? –

0

pourraient fonctionner sans expressions régulières du tout

  • Recherche de cette façon vous ne correspondront pas administrateur d'abord pour la plus longue chaîne en premier lieu,. Donc, avec vos exemples, vérifiez d'abord admin/foo/bar, puis admin/foo, puis admin.
  • explode() la chaîne sur la barre oblique, puis descendez les bits pour déterminer les correspondances, par ex. exploser ('/', $ request) puis vérifier les pièces; Si le premier résultat est admin, transmettez-le au contrôleur d'administration, qui peut déterminer l'itinéraire à partir du reste.
0

Une autre approche:

$sample_string="admin/foo/bar"; 

if(in_array("admin", explode("/",$sample_string))){ 
//true 
}else{ 
//false 
} 

Ou vous pouvez même remplacer l'exploser "/" avec exploser par "admin" .....

+0

Cela va correspondre 'quelque chose/admin/other' et je ne pense pas qu'il veut ça. –